Python | 「例外(try/except)を使ってネストを脱出する」テクニック

Python Python
スポンサーリンク

プログラミング初心者がよく困るのが「ネストが深くなりすぎて、途中で処理を止めたいのに止められない」問題です。
実務では 例外(try/except) を「非常口」として使い、複雑なネストを一気に抜けるテクニックがよく使われます。


1. 例外は「非常口」

  • 通常の流れ: forif の中を順番に処理する。
  • 例外の流れ: 「もう続けられない!」となったら 例外を投げる(raise) → 一気に外側へジャンプ。
  • イメージ図:
処理の流れ ──▶▶▶▶▶
          ↑
          │  raise Exception()
          └── 非常口から脱出 → except 節へ

2. 例題:二重ループから一気に脱出

フラグ方式だとこうなる

found = False
for row in matrix:
    for num in row:
        if num == target:
            print("見つかった:", num)
            found = True
            break
    if found:
        break
Python

👉 フラグを使って「外側も抜ける」工夫が必要。


例外方式だともっとシンプル

matrix = [
    [1, 2, 3],
    [4, 5, 6],
    [7, 8, 9]
]
target = 5

try:
    for row in matrix:
        for num in row:
            if num == target:
                print("見つかった:", num)
                raise StopIteration  # ← 非常口で一気に脱出
except StopIteration:
    pass
Python

👉 raise StopIteration で「もう探す必要なし!」と宣言 → except に飛んで処理終了。
フラグ不要でスッキリ。


3. 例題:エラー検出と即時終了

lines = [
    "INFO: 起動",
    "INFO: 接続",
    "ERROR: タイムアウト",
    "INFO: 再試行"
]

try:
    for i, line in enumerate(lines, start=1):
        if line.startswith("ERROR"):
            print(f"最初のエラーは {i} 行目: {line}")
            raise RuntimeError("エラー検出")  # ← 即脱出
except RuntimeError:
    print("エラー処理を実行しました")
Python

👉 ネストが深くても「エラーを見つけたら即脱出」できる。


4. 例題:関数化+例外でさらに整理

def search_matrix(matrix, target):
    try:
        for row in matrix:
            for num in row:
                if num == target:
                    return f"見つかった: {num}"
        raise ValueError("見つからなかった")
    except ValueError as e:
        return str(e)

print(search_matrix([[1,2],[3,4]], 3))  # 見つかった: 3
print(search_matrix([[1,2],[3,4]], 5))  # 見つからなかった
Python

👉 「見つからなかった」ケースを例外で表現すると、処理の意図が明快になる。


5. 初心者向けまとめ

  • 例外は「非常口」 → ネストを一気に抜けられる。
  • フラグ方式よりシンプル → 状態変数を持たなくても良い。
  • 関数化と組み合わせるとさらに読みやすい
  • 実務では「エラー検出」「探索打ち切り」「複雑な条件分岐の脱出」によく使われる。

👉 次のステップとして「例外を使いすぎるとコードが読みにくくなる」問題もあります。そこで 「通常の制御(break/return)」と「本当に異常なケース(例外)」を使い分けるのがプロのテクニックです。

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