【れいがいしょり】

例外処理 とは?

最終更新:
💡 例外が起きたら、続けるか伝えるかを決めて対処する

実行中に発生した例外を捕捉し、代替処理や通知、呼び出し元への伝播などで対処する仕組み。JavaScriptやJavaのtry-catch、Pythonのtry-exceptが代表的。

📌 このページのポイント
例外が呼び出し元へ伝わる 呼び出し元:tryの中でread_file() 対応するexceptで、案内などを行う 呼び出し read_file():ファイルを開く 見つからず、FileNotFoundError 発生箇所以降の通常処理は進まない 例外 型が合わなければ、さらに外側へ伝わる 後始末はfinallyやwithで備える
Pythonの例。捕捉しただけで正常な状態へ戻るわけではなく、処理を続けるか、再送出するかなどを設計します。
ひよこ ひよこ
例外処理って何のため?
ペンギン先生 ペンギン先生
例えばPythonでファイルを開こうとして見つからない場合など、例外が起きたときの対処を用意するためだよ。メッセージを出して再入力を求める、呼び出し元へ伝える、といった方法があるんだ。
ひよこ ひよこ
tryで囲めばそのまま続けられるの?
ペンギン先生 ペンギン先生
囲むだけでは足りないよ。Pythonならexceptで対象の例外を捕捉し、代替処理などを書く。例外が起きた位置からtry内の残りは飛ばされるし、捕捉できなければ呼び出し元へ伝わるんだ。
ひよこ ひよこ
どんな例外でもまとめて捕まえればいい?
ペンギン先生 ペンギン先生
対処できる種類を具体的に指定すると、本来のバグを隠しにくいよ。すべて無視して続けると、不完全なデータで次の処理を進めるかもしれない。必要なら情報を記録して、再び例外を送る方法もあるんだ。
ひよこ ひよこ
finallyって何?
ペンギン先生 ペンギン先生
Pythonではtry文を抜ける前に実行する後始末のブロックだよ。例外がなくても、捕捉されなかった例外があっても実行してから先へ進む。開いたファイルなどの解放に使うけど、プロセス自体が途中で停止する場合まで保証するものではないんだ。
ひよこ ひよこ
ファイルを閉じる処理を毎回書くの?
ペンギン先生 ペンギン先生
Pythonのファイル操作ならwith文を使うと、ブロックを抜けるときにファイルを閉じられるよ。後始末と、例外から復旧する処理は別の役割だから、必要に応じて組み合わせよう。
もっと詳しく知りたい人へ

finallyがあれば、どんな終了方法でも後始末できる?

できません。finallyは言語の通常の制御の流れで実行されるものです。例えばPythonのos._exit()は後始末のハンドラなどを呼ばずにプロセスを終了します。finallyだけであらゆる停止に対応できると考えず、重要なデータをいつ保存するかも設計します。

ペンギン
まとめ:ざっくりこれだけ覚えればOK!
「例外処理」って出てきたら「例外が起きたときの対処を用意する仕組み」と思えればだいたいOK!
📖 おまけ:英語の意味
「Exception Handling」 = 例外への対処
💬 通常の処理の流れから外れた例外を、どう扱うか決めるという意味だよ

参考資料

← 用語集にもどる