[Python]変数や属性の有無を確認する方法

Pythonでプログラミングをする際に、変数や属性の有無を確認することはよくあります。本記事では、Pythonで変数や属性の有無を確認する方法について解説します。

Pythonでの変数や属性の有無の確認方法

Pythonでは、変数や属性が存在するかどうかを確認することができます。変数の存在確認方法と属性の存在確認方法を解説します。

変数の存在確認方法

Pythonで変数が存在するかどうかを確認するには、in演算子を使用します。以下の例では、変数xが存在するかどうかを確認しています。

x = 10
if 'x' in globals():
    print('変数xは存在します。')

上記のプログラムを実行すると、変数xは存在します。というメッセージが表示されます。

属性の存在確認方法

Pythonで属性が存在するかどうかを確認するには、hasattr()関数を使用します。以下の例では、属性nameが存在するかどうかを確認しています。

class Person:
    def __init__(self, name):
        self.name = name
person = Person('John')
if hasattr(person, 'name'):
    print('属性nameは存在します。')

上記のプログラムを実行すると、属性nameは存在します。というメッセージが表示されます。

変数や属性の有無を確認するための組み込み関数

Pythonには、変数や属性の有無を確認するための組み込み関数があります。以下にその一部を紹介します。

globals()関数

globals()関数は、現在のグローバルスコープにある変数の辞書を返します。以下の例では、グローバルスコープにある変数xyを取得しています。

x = 10
y = 20
variables = globals()
if 'x' in variables:
    print('変数xは存在します。')
if 'y' in variables:
    print('変数yは存在します。')

上記のプログラムを実行すると、変数xは存在します。変数yは存在します。というメッセージが表示されます。

locals()関数

locals()関数は、現在のローカルスコープにある変数の辞書を返します。以下の例では、ローカルスコープにある変数xyを取得しています。

def test():
    x = 10
    y = 20
variables = locals()
if 'x' in variables:
    print('変数xは存在します。')
if 'y' in variables:
    print('変数yは存在します。')

上記のプログラムを実行すると、何も表示されません。これは、test()関数の中で定義された変数xyはローカルスコープに存在するため、locals()関数で取得できないからです。

変数や属性が存在しない場合のエラーハンドリング

変数や属性が存在しない場合、NameError例外が発生します。この例外をキャッチして、変数や属性が存在しない場合の処理を記述することができます。以下の例では、変数xが存在しない場合にNameError例外をキャッチしています。

try:
    x
except NameError:
    print('変数xは存在しません。')

上記のプログラムを実行すると、変数xは存在しません。というメッセージが表示されます。

変数や属性の存在確認の使用例

変数や属性の存在確認は、以下のような場面で役立ちます。

ファイルの存在確認

ファイルが存在するかどうかを確認するには、os.path.exists()関数を使用します。以下の例では、ファイルexample.txtが存在するかどうかを確認しています。

import os
if os.path.exists('example.txt'):
    print('ファイルexample.txtは存在します。')

上記のプログラムを実行すると、ファイルexample.txtは存在します。というメッセージが表示されます。

属性の動的な追加

属性が存在しない場合には、新しい属性を動的に追加することができます。以下の例では、setattr()関数を使用して、属性ageを動的に追加しています。

class Person:
    def __init__(self, name):
        self.name = name
person = Person('John')
if not hasattr(person, 'age'):
    setattr(person, 'age', 30)
print(person.age)

上記のプログラムを実行すると、30という数字が表示されます。これは、属性ageが追加されたことを示しています。

まとめ

Pythonで変数や属性の有無を確認する方法について解説しました。in演算子やhasattr()関数を使用することで、変数や属性が存在するかどうかを確認することができます。また、globals()関数やlocals()関数を使用することで、現在のスコープにある変数を取得することができます。さらに、NameError例外をキャッチすることで、変数や属性が存在しない場合の処理を記述することができます。