![【Python】None の場合のエラーを防ぐ or [ ]の使い方をわかりやすく解説!](https://pythonaiclarifydoubts.com/wp-content/uploads/2025/06/Python.png)
PythonでAPIからデータを取得したり、データベースから値を読み込む際に、値が None
だった場合にエラーが発生する問題はよく遭遇します。
その中でも or []
は「Noneの場合に空のリストを返す」「リストに対する操作を安全に実行する」など、簡潔にエラーを防ぐための基本的なテクニックです。
この記事では or []
の基本的な使い方から、活用シーン、注意点までをわかりやすく丁寧に解説します。
or [] とは?
or []
は、Pythonの論理演算子 or を使ったデフォルト値設定のテクニックです。
左側の値が「偽値」(Falsy)の場合に、右側の値(この場合は空のリスト []
)を返します。
None
は偽値なので、変数が None
の時に空のリストが代わりに使用されます。
Pythonでは、None
や空のコレクション、0 などは偽値として扱われるため、or []
を使って安全なデフォルト値を設定できます。
基本的な使い方
まずは、None
チェックを or []
で解決する基本的なコードを見てみましょう。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
# APIから取得したデータ(場合によってはNoneが返される) def get_user_hobbies(user_id): # 実際のAPIでは、ユーザーが見つからない場合にNoneを返すことがある if user_id == 1: return ["読書", "映画鑑賞", "プログラミング"] else: return None # or [] を使ってNoneエラーを防ぐ user_hobbies = get_user_hobbies(999) or [] print(f"趣味の数: {len(user_hobbies)}") # エラーなし: 趣味の数: 0 for hobby in user_hobbies: # エラーなし: ループが実行されない print(f"趣味: {hobby}") |
このコードでやっていることは:
get_user_hobbies()
がNoneを返す可能性があるor []
でNoneの場合に空のリストを設定len()
やfor
ループが安全に実行される- Noneエラー(AttributeError)が発生しない
これで値がNoneの場合に発生しがちなエラーを防げます。
具体例:辞書のリスト値取得での使い方
or []
は辞書からリスト値を取得する際にもよく使われます。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
# ユーザーデータ(一部のキーが存在しない可能性) user_data = { "name": "田中太郎", "age": 30, # "skills": ["Python", "JavaScript", "SQL"] # このキーが存在しない場合 } # or [] を使って安全にリストを取得 skills = user_data.get("skills") or [] projects = user_data.get("projects") or [] print(f"スキル数: {len(skills)}") # スキル数: 0 print(f"プロジェクト数: {len(projects)}") # プロジェクト数: 0 # リスト操作も安全に実行 all_items = skills + projects filtered_skills = [skill for skill in skills if "Python" in skill] |
このように:
dict.get()
でキーが存在しない場合にNoneを取得or []
でNoneを空のリストに変換- リスト操作(連結、内包表記など)が安全に実行
この一連の処理で、存在しないキーに対する安全なリスト操作ができます。
or 〜で使えるデフォルト値の例
Pythonでは、以下のような形式で様々なデフォルト値を指定できます。
用途 | 書き方の例 | 説明 |
---|---|---|
空のリスト | data or [] |
Noneや空の場合にリストを返す |
空の辞書 | config or {} |
Noneや空の場合に辞書を返す |
空の文字列 | text or "" |
Noneや空の場合に文字列を返す |
デフォルト数値 | count or 0 |
Noneや空の場合に数値を返す |
カスタムデフォルト | items or ["default"] |
カスタムのデフォルト値を指定 |
デフォルト値は、データの用途や後続処理に応じて適切に選択できます。
or [] を使うときの注意点
空のリストも偽値として扱われることに注意
空のリスト []
自体も偽値なので、意図しない動作になる場合があります。
1 2 3 4 5 6 7 |
# 注意が必要な例 def get_data(): return [] # 空のリストを返す result = get_data() or ["デフォルト"] print(result) # ["デフォルト"] - 空のリストが偽値として扱われる |
この場合は、明示的に None
チェックを使います。
1 2 3 4 |
result = get_data() if result is None: result = ["デフォルト"] |
0 や False も偽値として扱われることに注意
数値の0やFalseも偽値なので、これらが有効な値として必要な場合は注意が必要です。
1 2 3 4 5 6 |
count = 0 items = count or [] # count=0 が偽値として扱われる # 明示的にNoneのみをチェック items = [] if count is None else count |
可読性とのバランスを考慮
複雑な条件の場合は、or []
よりも明示的な条件分岐の方が読みやすいことがあります。
1 2 3 4 5 6 7 8 9 |
# シンプルな場合は or [] が適している items = data.get("items") or [] # 複雑な場合は明示的な条件分岐が適している if data is None or "items" not in data or not isinstance(data["items"], list): items = [] else: items = data["items"] |
まとめ
今回はPythonの or []
テクニックについて紹介しました。
or []
はNoneや偽値の場合に空のリストを返すシンプルなエラー防止手法- 辞書の
get()
メソッドと組み合わせて、存在しないキーに対する安全な処理が可能 - リスト操作→エラー防止→安全な処理といった一連の流れも簡潔に実現できる
- 空のリストや0も偽値として扱われるため、値の性質を理解した上での使用が有効
or []
をマスターすれば、API連携、データ処理、設定ファイル読み込みなど、さまざまな場面でNoneエラーを効率的に防げるようになります。
Pythonでの堅牢なプログラミングを行う実用的なテクニックとして、ぜひしっかり理解しておきましょう。