web-dev-qa-db-ja.com

Pythonで変数が定義されているかどうかを調べる

可能な重複:
変数が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?
352
user102008
try:
  thevariable
except NameError:
  print "well, it WASN'T defined after all!"
else:
  print "sure, it was defined."
551
Alex Martelli

'a' in vars() or 'a' in globals()

あなたが魅惑的になりたいなら、あなたも組み込みをチェックすることができます
'a' in vars(__builtins__)

294
John La Rooy

私はそれを避けるのがいいと思います。それは書くことがよりきれいでそしてより明確である:

a = None
if condition:
    a = 42
113
divegeek
try:
    a # does a exist in the current namespace
except NameError:
    a = 10 # nope
14
sc45

これが必要とされるかもしれない1つの考えられる状況:

finallyブロックを使用して接続を閉じるが、tryブロック内では、接続が定義される前にプログラムはsys.exit()で終了します。この場合、finallyブロックが呼び出され、接続が作成されていないので接続終了ステートメントは失敗します。

5
xsreality

このような場合には、a = Noneの代わりにdel aを実行することをお勧めします。これはオブジェクトaが(もしあれば)割り当てられたオブジェクトへの参照カウントを減らし、aが定義されていなくても失敗することはありません。 del文はオブジェクトのデストラクタを直接呼び出すのではなく、変数からバインド解除することに注意してください。参照カウントがゼロになったときにオブジェクトのデストラクタが呼び出されます。

5
Denis Otkidach