Объект имеет значение, но не существует?
У меня есть следующий код 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 считают их плохой практикой, и их следует избегать. Они могут быстро привести к проблемам с обслуживанием, и очень легко потерять имена созданных.