1

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

有人可以解释这里发生了什么吗?

4

1 回答 1

6

0False在 Python 中总是计算为:

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

因此,这样做:

if 0:
    ...
else:
    ...

将始终导致else块被执行。

有关计算结果的完整列表False,请参阅Python 文档中的真值测试


如果要检查是否bedrooms已定义,则可以使用try/except块并捕获 a NameError(当您使用不存在的名称时会引发):

try:
    bedrooms
except NameError:
    # bedrooms is not defined

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

于 2014-10-22T16:23:53.357 回答