当サイトは、アフィリエイト広告を利用しています
Pythonでは「null」はなく、同じ意味として「None」が使われる。 PythonにおけるNoneチェックの方法をまとめておく
当記事では
についてまとめる
推奨されている方法としては、
を使う
value = Noneif value is None:print("値はNoneです")if value is not None:print("値はNoneではありません")
これはPythonicで、最も安全かつ推奨される方法
if value == None: # 動くけど推奨されない...
これは動作しますが、「is」を使う方が型の違いによる誤判定を防げるため、
is Noneを使う方がいい
上記はNoneか否かのみを判定したが、実際には
を実装したい場合もよくある。
その場合は
で判定して処理させることができる
ifは下記を同時に確認できる
そのため、正常なデータがあるときだけ処理させることができる
# bool型のチェックbool_val = Trueif bool_val:print("bool: 正常なデータ")# int型のチェック(0以外)int_val = 10if int_val:print("int: 正常なデータ")# list型のチェック(空でない)list_val = [1, 2, 3]if list_val:print("list: 正常なデータ")# dict型のチェック(キーと値がある)dict_val = {"key": "value"}if dict_val:print("dict: 正常なデータ")# str型のチェック(空文字でない)str_val = "hello"if str_val:print("str: 正常なデータ")# None型のチェック(ifではFalseとみなされるのでスキップされる)none_val = Noneif none_val:print("None: 正常なデータ") # 実行されない# 実行結果# bool: 正常なデータ# int: 正常なデータ# list: 正常なデータ# dict: 正常なデータ# str: 正常なデータ
動作は下記で確認
if notは下記を同時に確認できる
そのため、取得失敗などのときのみにエラー処理したい場合に使える
# bool型のチェックbool_val = Falseif not bool_val:print("bool: データ取得失敗またはFalseです")# int型のチェック(0)int_val = 0if not int_val:print("int: データ取得失敗または0です")# list型のチェック(空リスト)list_val = []if not list_val:print("list: データ取得失敗または空リストです")# dict型のチェック(空辞書)dict_val = {}if not dict_val:print("dict: データ取得失敗または空辞書です")# str型のチェック(空文字)str_val = ""if not str_val:print("str: データ取得失敗または空文字です")# None型のチェック(NoneはFalseとみなされる)none_val = Noneif not none_val:print("None: データ取得失敗またはNoneです")# 実行結果# bool: データ取得失敗またはFalseです# int: データ取得失敗または0です# list: データ取得失敗または空リストです# dict: データ取得失敗または空辞書です# str: データ取得失敗または空文字です# None: データ取得失敗またはNoneです
実際の動作確認は下記
DB取得結果のハンドリング等で使うことができる。
正常時に処理するのか、異常時に処理するのかを適宜使い分ける必要はある
result = db.fetch_data()if result:# データがあるときだけ処理process(result)else:# データがないときは何もしない or ログだけprint("データなし")
result = db.fetch_data()if not result:# データがないときにエラー処理raise ValueError("データが取得できませんでした")else:process(result)
言語によって若干、動作に違いがあるので
pythonの場合のNoneチェックの方法をまとめておく。