【れいがいしょり】

例外処理 とは?

最終更新:
💡 エラーを「想定内」にして安全に処理する
📌 このページのポイント
例外処理(コールスタックを遡る例外) コールスタック main() processData() readFile() FileNotFoundError! 例外の伝播 例外が上に伝播 catch で捕捉 → 復旧 ログ出力、代替処理 捕捉されない → クラッシュ プログラム異常終了 代表的な例外: NullPointerException IndexOutOfBounds IOException 例外の階層 Exception ├ IOError └ ValueError
例外処理のイメージ
ひよこ ひよこ
例外処理って何のため?
ペンギン先生 ペンギン先生
ネットワーク通信の失敗、ファイルが見つからない、ゼロ除算など、実行時に起こりうるエラーに備えるためだよ。例外処理がないとエラー発生時にプログラムがクラッシュする。try-catchで囲めば、エラーが起きてもユーザーにメッセージを表示して処理を続行できるんだ
ひよこ ひよこ
全部try-catchで囲めばいい?
ペンギン先生 ペンギン先生
それはアンチパターンだよ。例外は「起こりうるが防げないエラー」に対して使う。nullチェックやバリデーションで防げるものはif文で事前にチェックする方が良い。try-catchの乱用はパフォーマンスが下がるし、本来のバグが見つけにくくなるんだ
ひよこ ひよこ
catch して何もしないのはダメ?
ペンギン先生 ペンギン先生
典型的なバグ隠蔽パターンだよ。catch (e) {} と空にすると、エラーが静かに無視されて後から原因が分からなくなる。最低限ログに記録する、ユーザーに通知する、上位に再throwするなどの対処を必ず書こう。「例外を握りつぶすな」はエンジニアの鉄則だよ
ひよこ ひよこ
finallyって何?
ペンギン先生 ペンギン先生
エラーの有無に関わらず必ず実行されるブロックだよ。ファイルを開いた後のクローズ処理、データベース接続の解放、一時ファイルの削除など「後始末」を確実に行うために使う。Pythonのwith文やC#のusingも同じ目的のより洗練された構文だね
ペンギン
まとめ:ざっくりこれだけ覚えればOK!
「例外処理」って出てきたら「エラーに備えて安全に対処する仕組み」と思えればだいたいOK!
📖 おまけ:英語の意味
「Exception Handling」 = 例外処理
💬 Exception(例外=想定外のこと)をHandling(処理する)仕組みだよ
← 用語集にもどる