HOWTO · Python

Python で変数が None かどうかを確認する

Python の変数が None を保持しているかを判定する方法と、各方法の使い分けを解説します。

このページの内容

Python の None は、値が存在しないことを表します。0、False、空文字列とは異なる値です。変数が None を保持しているか調べるには value is None を使い、反対に None ではないことを調べるには value is not None を使います。

is 演算子を使用して変数が None かどうかを確認する

None はシングルトンであり、None オブジェクトは1つだけです。is 演算子は、2つの参照が同じオブジェクトを指しているかを調べるため、None を直接確認する際に推奨される方法です。次の例では、どちらの条件も示しています。

value = None

if value is None:
    print("The value is None")
else:
    print("The value is not None")

if value is not None:
    print("A value is present")
else:
    print("No value is present")
The value is None
No value is present

値が存在する場合にだけ処理を続けたいときは、2つ目の形式を使います。たとえば、その値に対してメソッドを呼び出す前に判定できます。また、同一性を調べるため、真偽値が偽になる別のオブジェクトを None と取り違えずに済みます。

isinstance() 関数を使用して変数が None かどうかを確認する

isinstance() は、オブジェクトが指定した型に属するかを調べ、真偽値を返します。type(None) は NoneType なので、次の式でその型かどうかを判定できます。

value = None
print(isinstance(value, type(None)))
True

型を調べること自体が目的なら、この方法も有効です。ただし、None かどうかを直接調べるだけなら、value is None のほうが簡潔で、意図も明確です。

辞書を使用して変数が None かどうかを確認する

辞書では None をキーとして使えるため、特定の辞書にそのキーがあるかを調べられます。これは限定的な検索例であり、任意の変数が None かどうかを一般的に調べる方法ではありません。

value = None
messages = {None: "The value is None"}

if value in messages:
    print(messages[value])
else:
    print("No matching key")
The value is None

この条件が調べているのは、value が messages のキーに一致するかどうかです。この辞書に None が含まれ、例でもその用途にしているため、この場合は値が None だと分かります。通常の変数チェックには is None を使ってください。

try および except ブロックを使用して変数が None かどうかを確認する

None のような値を使った操作が失敗する場合、例外処理でその失敗に対応できます。ただし、これは変数を直接判定する方法ではありません。たとえば、None と整数を加算すると TypeError が発生します。無関係な問題まで隠してしまう可能性があるため、裸の except ではなく、想定する例外を指定してください。例外処理については「Python の try/except」のガイドも参照できます。

value = None

try:
    result = value + 5
except TypeError:
    print("This operation needs a numeric value")
This operation needs a numeric value

この例は、加算に失敗したときの処理です。プログラムの判断に None かどうかが必要なら、操作を実行する前に明示的に確認してください。

等価性(==)演算子を使用して変数が None かどうかを確認する

value == None は値を比較し、value が None なら True になります。ただし、オブジェクトは独自の等価性比較を定義できるため、この方法では None シングルトンを識別する意図が明確になりません。0、False、""、[] などの通常の値は None と等しくありません。これらの真偽値が偽であっても、None であることを意味しません。この判定には value is None を使うのが適切です。

結論

Python の変数が None を保持しているか直接調べるには value is None を使い、反対の条件には value is not None を使います。isinstance(value, type(None)) は型を調べる選択肢です。辞書のメンバーシップ判定は特定の辞書に限られ、try/except は想定される操作の失敗に対応するためのものです。それぞれの違いを踏まえて、コードの目的に合う方法を選んでください。