Python - 在if语句中使用字符串作为条件

5

我想要实现这个功能:

a = "1 or 0"
if (a): Print "true"

我可以使用字符串作为if语句的条件吗?这是可能的吗?


3
可以这样做,但强烈不建议。最好修改你的代码以避免这种情况发生。 - Volatility
@波动性是被谁所反对?不是被 PEP-8 反对,PEP-8 表示:“对于序列(字符串、列表、元组),使用空序列为假的事实。” - Paul Hankin
@匿名者:这个字符串是有效的Python代码(我认为这是有意的),所以我认为OP基本上是在问“我可以将这个字符串视为代码并对其进行评估吗”,这正是eval的作用。 - Blender
1
@匿名 我认为你没有理解问题的重点。我在谈论需要使用“eval”的代码。 - Volatility
3个回答

11

这是可能的,但不要这样做:

a = '1 or 0'

if eval(a):
    print 'a is True'

eval() 很难调试,在这里没有任何优点,而且如果您允许任意用户输入的话,它很容易被利用(例如:a = "__import__('os').system('rm -Rf /')")。


3
以下是该链接中的内容翻译:危险!Python 的 eval() 函数真的很危险 eval() 函数能够解析并执行字符串形式的 Python 代码。而且,这个函数被广泛用于动态地生成代码并在运行时使用它们。但是,在使用 eval() 函数时需要非常小心,因为它可以让攻击者在运行你的程序时注入恶意代码。攻击者可以将任何他们想要的代码传递给 eval() 函数,并且该函数会执行它。因此,如果你不小心,eval() 可以轻松地导致安全漏洞。相反,应该尽可能地避免使用 eval()。如果需要动态地执行代码,请考虑使用其他替代方案,例如 exec() 函数或 ast 模块。这些替代方案可以提供更好的安全性和可控性,因为它们限制了执行的代码类型和范围。总之,eval() 是一个强大的函数,但同时也很危险。在编写程序时,应该避免使用它,除非你知道自己在做什么并且有充分的防范措施来确保安全性。 - Volatility
我理解这个问题是“如果a等于1或0”,并且假设他们忘记了比较运算符“==”。但是你的答案更有道理。 - Jason Sperske

3
你可以将字符串 "a ==" 与你的输入字符串组合起来,然后使用 eval() 来执行它。请注意,由于允许执行任意代码,因此必须小心谨慎。

1

如果字符串不为空,if语句中的字符串将始终为True,因此在if语句中使用它是没有用的。

In [12]: my_str = 'a=a'

In [13]: if my_str:
   ....:     print True
   ....: else:
   ....:     print False
   ....:     
True

In [14]: new_str = ''

In [15]: if new_str:
   ....:     print True
   ....: else:
   ....:     print False
   ....:     
False

In [16]: 

尝试传递一些计算结果为布尔值的实际条件。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接