2015/05/31

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)

以上です。

0 件のコメント: