可能な重複:
変数がpythonで定義されていることを確認する簡単な方法は?
Pythonに変数が存在するかどうかをどうやって確認するのですか?
実行時にコード内の特定の場所に変数が設定されているかどうかをどのように確認しますか。 (1)変数が条件付きで設定され、(2)変数が条件付きで削除される可能性があるため、これは必ずしも明白ではありません。 Perlのdefined()
、PHPのisset()
、Rubyのdefined?
のようなものを探しています。
if condition:
a = 42
# is "a" defined here?
if other_condition:
del a
# is "a" defined here?
try:
thevariable
except NameError:
print "well, it WASN'T defined after all!"
else:
print "sure, it was defined."
'a' in vars() or 'a' in globals()
あなたが魅惑的になりたいなら、あなたも組み込みをチェックすることができます'a' in vars(__builtins__)
私はそれを避けるのがいいと思います。それは書くことがよりきれいでそしてより明確である:
a = None
if condition:
a = 42
try:
a # does a exist in the current namespace
except NameError:
a = 10 # nope
これが必要とされるかもしれない1つの考えられる状況:
finally
ブロックを使用して接続を閉じるが、try
ブロック内では、接続が定義される前にプログラムはsys.exit()
で終了します。この場合、finally
ブロックが呼び出され、接続が作成されていないので接続終了ステートメントは失敗します。
このような場合には、a = None
の代わりにdel a
を実行することをお勧めします。これはオブジェクトa
が(もしあれば)割り当てられたオブジェクトへの参照カウントを減らし、a
が定義されていなくても失敗することはありません。 del
文はオブジェクトのデストラクタを直接呼び出すのではなく、変数からバインド解除することに注意してください。参照カウントがゼロになったときにオブジェクトのデストラクタが呼び出されます。