Python if(True或False)有时计算为False

Python if(True或False)有时计算为False,python,if-statement,evaluation,Python,If Statement,Evaluation,我在下面的Python(2.7.3)脚本中遇到了一个奇怪的问题。 有时,当a=True和b=False时,后续if子句的计算结果为False,其中的代码将不会运行 当a、b或两者都为真时,它总是第一次起作用,但有时之后它会随机失败 有人能解释这种行为以及如何避免它吗?多谢各位 while True: a = b = False a = func1() # Returns True or False b = func2() # Returns True or Fal

我在下面的Python(2.7.3)脚本中遇到了一个奇怪的问题。 有时,当a=True和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)

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

print a
print b
差不多

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

这至少应该确认你说的是真/假是真/假。

第一行是不相关的。它对脚本的执行没有影响。请给出一个示例,其中您认为
a或b
返回
True
(ish)值,但如果
语句未执行,则返回
。您能否向我们展示“随机失败”的回溯?您是否打印了
a
b
为假的输出?您必须给我们代码来重现您所说的内容。如果你不这样做,就很难帮助你。似乎更有可能
a或b
的计算结果是
True
,因为事实上其中一个是
True
。你能证明这个断言是错误的吗?换句话说,我认为问题在于
func1()
func2()
。问题标题中的陈述实际上是不可能的。如果python将语句求值为false,那么这两个变量的值在布尔上下文中都被视为false。每当您认为python解释器是错误的,请再想一想——可能是您错了。