Python Tips: 変数が定義されたかどうかを調べたい

Python で変数が定義されているかどうかをチェックする方法をご紹介します。

最もシンプルなやり方は、変数へのアクセスを試みて例外をキャッチする方法です。

# 変数 abc があるかどうかをチェック
try:
    abc
except NameError:
    # なかった場合の処理

変数がそのスコープに存在するかどうかだけでなく、スコープを指定してもう少し厳密にチェックしたい場合には locals() globals() が使えます。 locals() はローカルスコープの名前を、 globals() はグローバルスコープの名前一覧を格納したリストを返します。

# ローカルスコープでチェック
if 'abc' in locals():
    # あった場合の処理
else:
    # なかった場合の処理
# グローバルスコープでチェック
if 'abc' in globals():
    # あった場合の処理
else:
    # なかった場合の処理

ちなみに、クラスが特定の名前のアトリビュートやメソッドを持っているかどうかをチェックしたい場合には hasattr()dir() が使えます。

class C(object):
    def __init__(self):
        self.abc = 0

c = C()

# c に abc というメンバがあるかどうかをチェック
if hasattr(c, 'abc'):
    print(c.abc)

# 同上
if 'abc' in dir(c):
    print(c.abc)

以上です。