【れいがいしょり】

例外処理 とは?

💡 エラーを「想定内」にして安全に処理する
📌 このページのポイント
例外処理(コールスタックを遡る例外) コールスタック 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(処理する)仕組みだよ
← 用語集にもどる