プログラミング初心者が混乱しやすいのが、「break や return で処理を止める」場合と「例外で処理を止める」場合の違いです。
実務では「普通の流れ」と「異常な流れ」を分けて書くことが大事です。
1. 通常の制御(break / return)
- 目的: 「処理の流れを整理する」ために使う。
- 例: 探索が終わった、条件を満たした、もう続ける必要がない。
- 特徴: 想定内の動き。プログラムの正常な一部。
例題: リストから値を探す
nums = [1, 3, 5, 7, 9]
target = 5
for n in nums:
if n == target:
print("見つかった:", n)
break # ← 正常な終了
else:
print("見つからなかった")
Python👉 「見つかったら break」「最後までなければ else」 → これは正常な流れ。
2. 本当に異常なケース(例外)
- 目的: 「想定外の事態」を扱う。
- 例: ファイルが存在しない、ネットワークが切れた、ゼロで割った。
- 特徴: 普通の処理ではない。プログラムが続けられない「エラー」。
例題: ファイルを開く
try:
with open("data.txt") as f:
content = f.read()
print("読み込み成功")
except FileNotFoundError:
print("ファイルが見つかりませんでした")
Python👉 「ファイルがない」というのは想定外 → 例外で処理を止めて、エラー対応。
3. 使い分けの考え方
| ケース | 適切な方法 | 理由 |
|---|---|---|
| 探索が終わった | break / return | 正常な処理の一部 |
| 条件を満たしたら終了 | break / return | 想定内の分岐 |
| 入力が不正(ゼロ除算など) | raise / except | 想定外の異常 |
| ファイルが存在しない | raise / except | 環境依存の異常 |
4. 例題で比較
正常な制御(return)
def find_even(nums):
for n in nums:
if n % 2 == 0:
return n # 最初の偶数を返す
return None # なければ None
Python👉 偶数があるかどうかは「想定内」なので return で処理。
異常な制御(例外)
def divide(a, b):
if b == 0:
raise ZeroDivisionError("ゼロでは割れません") # 異常
return a / b
try:
print(divide(10, 0))
except ZeroDivisionError as e:
print("エラー:", e)
Python👉 「ゼロで割る」は想定外 → 例外で処理を止める。
5. 初心者向けまとめ
- break / return → 正常な流れの中で「もう終わり」「結果が出た」ときに使う。
- 例外(try/except) → 想定外のエラーや環境依存の問題に使う。
- 実務の鉄則: 「普通の分岐は break/return」「異常は例外」で分けるとコードが読みやすくなる。
💡 つまり「例外は非常口、break/return は通常の出口」。
この違いを意識すると、コードの意図がはっきりして読みやすくなります。

