【问题标题】:Python - Using string as condition in if statementPython - 在 if 语句中使用字符串作为条件
【发布时间】:2013-04-29 05:43:14
【问题描述】:

我正在尝试这样做:

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

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

【问题讨论】:

  • 是的,但强烈建议不要这样做。最好更改您的代码以避免这种情况。
  • @Volatility 被谁劝阻了?不是 PEP-8 所说的“对于序列,(字符串,列表,元组),使用空序列是错误的事实。”
  • @Anonymous:字符串是有效的 Python 代码(我认为这是故意的),所以我认为 OP 基本上是在问“我可以将此字符串视为代码并对其进行评估”,这就是 @987654322 @ 是为了。
  • @Anonymous 我认为您错过了问题的重点。我说的是有代码,这意味着你必须使用eval

标签: python string if-statement conditional-statements


【解决方案1】:

对于if 语句if it is not empty,字符串将始终为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]: 

所以尝试传递一些计算为布尔值的真实条件。

【讨论】:

    【解决方案2】:

    您可以将字符串“a ==”与您的输入字符串和eval() 组合起来。您应该小心执行此操作,因为您允许执行任意代码。

    【讨论】:

      【解决方案3】:

      有可能,但不要这样做:

      a = '1 or 0'
      
      if eval(a):
          print 'a is True'
      

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

      【讨论】:

      • 我将问题读作“如果 a = 1 或 0”,并假设他们忘记了比较 ==。但你的回答更有意义
      猜你喜欢
      • 2023-03-20
      • 2014-08-05
      • 1970-01-01
      • 1970-01-01
      • 2014-06-18
      • 2015-09-23
      • 2021-03-23
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多