初心者がよくやってしまうのが「何でもかんでも try/except で囲む」ことです。
確かに例外は便利ですが、使いすぎるとコードが読みにくくなり、バグの原因を隠してしまうことがあります。ここではその問題点と、例外を最小限に抑える設計のコツを解説します。
1. 問題点:例外だらけのコードは読みにくい
悪い例
try:
nums = [1, 2, 3]
try:
target = 2
try:
for n in nums:
if n == target:
print("見つかった")
raise Exception("終わり")
except:
pass
except:
pass
except:
pass
Python👉 何でも try/except にしてしまうと「どこで何が起きたか」が分からなくなる。
本来は break や return で済む処理まで例外にしてしまうと、正常な流れと異常な流れの区別が消える。
2. コツ① 正常な制御は break / return を使う
例外は「想定外の異常」に使うべきです。
「見つかったら終了」などの正常な流れは break や return で書く方が読みやすい。
良い例
nums = [1, 2, 3]
target = 2
for n in nums:
if n == target:
print("見つかった")
break
else:
print("見つからなかった")
Python👉 正常な探索処理 → break / else で表現。例外は不要。
3. コツ② 本当に異常なケースだけ例外にする
例外は「プログラムが続けられない事態」に使う。
例題: ファイル読み込み
try:
with open("data.txt") as f:
content = f.read()
except FileNotFoundError:
print("ファイルが存在しません")
Python👉 「ファイルがない」は想定外 → 例外で処理。
「見つからなかった(検索結果ゼロ)」は正常 → 例外ではなく通常の分岐。
4. コツ③ 例外をまとめて扱う
例外を細かく分けすぎると読みにくい。
「ここではファイル関連のエラーをまとめて処理する」と決めるとスッキリする。
良い例
try:
with open("data.txt") as f:
content = f.read()
except (FileNotFoundError, PermissionError) as e:
print("ファイルエラー:", e)
Python👉 関連する例外をまとめて処理 → コードが簡潔になる。
5. コツ④ 例外を隠さずログに残す
初心者がやりがちなのが「except: pass」。
これはエラーを握りつぶしてしまい、原因が分からなくなる。
悪い例
try:
risky_operation()
except:
pass # ← エラーが消えてしまう
Python良い例
import logging
try:
risky_operation()
except Exception as e:
logging.error("エラー発生: %s", e)
Python👉 エラーは無視せず、ログに残すことで後から原因を追える。
6. 初心者向けまとめ
- 例外は「非常口」 → 本当に異常なケースだけに使う。
- 正常な流れは break / return → 例外で書かない。
- 関連する例外はまとめて処理 → コードを簡潔に。
- エラーは隠さずログに残す → デバッグしやすくなる。
💡 つまり「例外は最小限に、正常な処理は通常の制御構文で」。
このルールを守ると、コードが読みやすくなり、バグも減ります。

