为什么这不起作用:
file = "v3a2"
if "v1" or "v2" in file:
v1.write(total)
elif "v3" in file:
print "never here?????"
如何制定这个?
答案 0 :(得分:10)
if "v1" or "v2" in file:
相当于
if ("v1") or ("v2" in file):
始终为True
,因为bool("v1")==True
if any(x in file for x in ["v1", "v2"]):
或
if "v1" in file or "v2" in file:
如果要检查的项目超过2个或3个,则any
的版本看起来更好
答案 1 :(得分:8)
尝试
if "v1" in file or "v2" in file:
而不是
if "v1" or "v2" in file:
对Python Boolean Operations的审核可能会有所帮助。在摘要中该页面的底部还有一个运算符优先级表。如果您向表格咨询,您可以看到,由于in
运算符的优先级高于or
运算符,因此表达式的解释如下:
if ("v1") or ("v2" in file):
而不是您的预期/预期。
另请注意,正如@ sepp2k在下面的有用评论中提到的那样,如果or
的优先级高于in
,那么您的表达式最终会为if ("v1" or "v2") in file:
,而这也不会以你想要的方式工作。
以下是指向另一个table of operator precedence的直接链接,因为我找不到上述内容。