我只是在代码中遇到了一个奇怪的错误,原因是我在一个条件关键字中使用了逗号,而不是and关键字。下面是一个经过润色的示例,参见下面的代码:
def foo():
s = set([1, 2, 3])
a = 4
b = 5
if (a, b in s): # Should have been: if (a and b in s):
print "Foo"
foo() # prints "Foo"为什么条件计算为True?即使a是None,"Foo“也会被打印出来。
发布于 2017-01-05 03:32:31
表达式(a, b in s)是一个有效的Python。它将评估到真理,不管它的内容,只要它至少有一个元素。(这个有两个)。
发布于 2017-01-05 03:35:08
这是因为(a, b in s)的计算结果为长度-2元组(4, False),而在python中,如果元组长度为非零,则元组被认为是True。
发布于 2017-01-05 03:50:58
代码打印'Foo‘而不管a和wether b的值在s中的原因是行:
(a, b in s)
实际上是个元组。if语句检查元组是否存在,并打印Foo。什么时候
s=set([1,2,3])
a=None
b=5检查的条件是
if(None, False):这总是正确的,因为
(None, False) #is a non empty tuple.https://stackoverflow.com/questions/41476869
复制相似问题