Python | 「通常の制御(break/return)」と「本当に異常なケース(例外)」の使い分け

Python Python
スポンサーリンク

プログラミング初心者が混乱しやすいのが、「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 は通常の出口」。
この違いを意識すると、コードの意図がはっきりして読みやすくなります。

Python
スポンサーリンク
シェアする
@lifehackerをフォローする
スポンサーリンク
タイトルとURLをコピーしました