Объект имеет значение, но не существует?

У меня есть следующий код 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 всегда оценивает False в Python:

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

Следовательно, делая это:

if 0:
    ...
else:
    ...

всегда будет вызывать else блок для исполнения.

Для полного списка того, что оценивает False см. Проверка истинности значения в документации по Python.


Если вы хотите проверить, если bedrooms определяется, то вы могли бы использовать try/except заблокировать и поймать NameError (которое возникает, когда вы используете несуществующее имя):

try:
    bedrooms
except NameError:
    # bedrooms is not defined

Но напрашивается вопрос, зачем вам это нужно делать в первую очередь. Если речь идет о динамических именах переменных, то я хотел бы сказать, что большинство программистов на Python считают их плохой практикой, и их следует избегать. Они могут быстро привести к проблемам с обслуживанием, и очень легко потерять имена созданных.

Другие вопросы по тегам