【问题标题】:Python if(True or False) is sometimes evaluated to False [closed]Python if(True or False) 有时被评估为 False [关闭]
【发布时间】:2014-01-21 06:51:36
【问题描述】:

我在使用 Python (2.7.3) 脚本时遇到了一个奇怪的问题。 有时,例如a = True and b = False 随后的 if 子句的计算结果为 False,其中的代码将不会运行。

当 a、b 或两者都为真时,它总是第一次工作,但有时后来它随机失败。

谁能解释这种行为以及如何避免它?谢谢。

while True:
    a = b = False
    a = func1()   # Returns True or False
    b = func2()   # Returns True or False

    print a       # Just for debugging..
    print b       # Just for debugging..

    if(a or b):
        print "Here we are.."
        func3()   # It may take hours until we return from here

    time.sleep(45)

【问题讨论】:

  • 第一行无关紧要。它与脚本的执行无关。请举例说明您认为a or b 返回True(ish) 值但您的if 语句未执行。
  • 你能告诉我们“随机失败”的回溯吗?您是否在a 和b 为假的地方打印了输出?
  • 您必须向我们提供代码才能重现您所说的内容。如果你不这样做,就很难为你提供帮助。
  • a or b 似乎更有可能评估为True,因为其中之一实际上是True。你能证明这个断言是错误的吗?也就是说,我认为问题出在func1()或func2()。
  • 您的问题标题中的陈述实际上是不可能的。如果 python 将该语句评估为 false,则两个变量都有一个在布尔上下文中被视为 false 的值。每次你认为python解释器错了,再想一想——很可能是你错了。

标签: python if-statement evaluation


【解决方案1】:

这可能与 Python 认为是/是“真”的值有关。有时这些规则并不直观;您可能需要查看有关该主题的文档。为了帮助调试,也许你可以尝试而不是

print a
print b

类似

print a
if a:
    print "a is True"
print b
if b:
    print "b is True"

这至少应该确认你这是真/假是*实际上*真/假。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-03-15
    • 2020-12-15
    • 2015-03-22
    • 1970-01-01
    • 1970-01-01
    • 2019-04-24
    • 2013-06-22
    • 2012-05-13
    相关资源
    最近更新 更多