我有以下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 :(得分: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程序员认为是一种不好的做法,应该避免。它们很快就会导致维护问题,并且很容易忘记创建的名称。