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

0FalsePython では常に次のように評価されます。

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

結果として、これを行う:

if 0:
    ...
else:
    ...

常にelseブロックが実行されます。

が に評価されるものの完全なリストについては、Python ドキュメントのTruth Value TestingFalseを参照してください。


bedroomsが定義されているかどうかを確認したい場合は、 (存在しない名前を使用すると発生する)try/exceptに対してブロックとキャッチを使用できます。NameError

try:
    bedrooms
except NameError:
    # bedrooms is not defined

しかし、そもそもなぜこれを行う必要があるのか​​という疑問が生じます。動的な変数名が含まれている場合、それらはほとんどの Python プログラマーによって悪い習慣と見なされており、避けるべきであると言いたいです。それらはすぐにメンテナンスの問題につながる可能性があり、作成された名前を簡単に追跡できなくなります。

于 2014-10-22T16:23:53.357 に答える