我有以下 Python 代码:
if bedrooms: # bedrooms exists
.....
else: # BEDROOMS DOES NOT EXIST
bn = "BEDROOMS DOES NOT EXIST"
我在我的调试器中逐步执行它并注意到即使 bedroom == 0 ,流程也会跳转到 else 语句。
为了测试这个我尝试了:
>>> bedrooms
0.0
>>> type(bedrooms)
<type 'float'>
谁能解释一下这是怎么回事?
请您参考如下方法:
0 在 Python 中总是计算为 False:
>>> bool(0)
False
>>> bool(0.0)
False
>>> not 0
True
>>>
因此,这样做:
if 0:
...
else:
...
将始终导致执行 else block 。
有关计算结果为 False 的完整列表,请参阅 Truth Value Testing在 Python 文档中。
如果你想检查 bedrooms 是否被定义,那么你可以使用 try/except阻止并捕获 NameError(当您使用不存在的名称时引发):
try:
bedrooms
except NameError:
# bedrooms is not defined
但这引出了一个问题,即为什么您首先需要这样做。如果它涉及动态变量名,那么我想说的是,大多数 Python 程序员认为这些都是不好的做法,应该避免。它们会很快导致维护问题,并且很容易忘记创建的名称。
