对象有价值但似乎不存在?

时间:2014-10-22 16:21:48

标签: python if-statement evaluation truthiness

我有以下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'>

有人能解释一下这里发生了什么吗?

1 个答案:

答案 0 :(得分:6)

0始终在Python中评估为False

>>> bool(0)
False
>>> bool(0.0)
False
>>> not 0
True
>>>

因此,这样做:

if 0:
    ...
else:
    ...

将始终导致else块被执行。

有关评估为False的内容的完整列表,请参阅Python文档中的Truth Value Testing


如果要检查是否定义了bedrooms,那么可以使用try/except块并捕获NameError(使用不存在的名称时会引发):< / p>

try:
    bedrooms
except NameError:
    # bedrooms is not defined

但这引出了为什么你需要首先做这件事的问题。如果它涉及动态变量名,那么我想说这些被大多数Python程序员认为是一种不好的做法,应该避免。它们很快就会导致维护问题,并且很容易忘记创建的名称。