今回は、Pythonでnullを判定する方法についてご紹介します。
Pythonにおけるnullとは?
Pythonにはnullに相当する値としてNoneが存在します。
Noneは変数が値を持っていない状態や、関数が何も返さない場合などを表すために使われます。
たとえば、未初期化の変数を扱うときや、何も値を返さない関数の戻り値を受け取るときなどに登場します。
Noneを判定する方法
Noneを正確に判定する場合、Pythonではisを使うのが一般的です。
これは、Noneがシングルトン(唯一のオブジェクト)であるため、同じオブジェクトかどうかを確認するisが最適だからです。
1 2 3 4 5 6 |
x = None if x is None: print("xはNoneです") else: print("xはNoneではありません") |
xはNoneです
このようにif x is None:で判定すると、他の値(空文字や0など)と明確に区別できます。
逆に「Noneではない」ことを判定したい場合は、if x is not None:のように書きます。
is と == の違い
Pythonではisと==は明確に役割が異なります。
- is:オブジェクトの同一性を判定する
- ==:オブジェクトの値が等しいかどうかを判定する
Noneはすべて同じオブジェクトを参照しているため、isで比較することが安全です。
等価演算子==を用いると、ユーザー定義クラスで__eq__が独自実装されている場合などに、予期しない結果を生む可能性があります。
よくあるエラー例
Pythonでnullというキーワードを使おうとして、エラーが発生するケースがあります。
Pythonにはnullという予約語は存在せず、代わりにNoneを使う必要があります。
1 2 |
# 以下のように書くとエラーになる x = null # Pythonにはnullというキーワードがない |
NameError: name ‘null’ is not defined
また、if not x:のように書くと、xがNoneに限らずFalseと評価される値(0、空文字、空リストなど)にも該当します。
厳密にNoneだけを判定したい場合は、if x is None:が推奨されます。
まとめ
Pythonでnullに相当するNoneを判定するにはisを使います。
等価演算子==ではなく、オブジェクトの同一性をチェックできるisを用いるのが安全です。
「if not x:」はNone以外のFalsyな値とも区別がつかないため、厳密な判定には向きません。