try~catch文の使い方と例外の握り潰しについて

  • このエントリーをはてなブックマークに追加

スポンサーリンク

※サイト運営にサーバーは必須です※
~このサイトもエックスサーバーを使用しています~

実行時エラーの一例

まずは、以下のようなコードを考えてみましょう。

ソースコード(言語はC#)

実行結果

処理前
ハンドルされていない例外: System.IndexOutOfRangeException: インデックスが配列の境界外です。

この文はエラーになります。

int[] arr = new int[5];

上の文で、配列はarr[0]~arr[4]まで用意されます。

しかし、6番目に相当するarr[5]は存在しません。

そのため、IndexOutOfRangeExceptionが生じます。

この段階でプログラムの処理が中断します。

その結果、以下の文は処理されません。

Console.WriteLine(“処理後”);

try~catch文

try~catch文は以下のように使います

try
  {
    例外が起こりそうな処理;
  }
catch
  {
    例外が起きた場合の処理;
  }

まず、例外が起こりそうなコードをtry{}の中に入れておきます。

もしも、エラーがあった場合は、その時点で、tryブロックの処理は中断します。そして、catchブロックの処理が行われます。

もしもエラーが生じなかった場合は、catchブロックの処理は実行されません。

ソースコード

実行結果

処理前
エラーが生じました
操作が完了しました

エラーが生じた時にcatchブロックに制御が移るので、以下の文は処理されません。

Console.WriteLine(“処理後”);

それ以外の文は、処理されます。

例外の握り潰し

ここで、catchブロックで何も処理を記述しなかったとします。

この場合、tryブロックで例外が発生したとしても、プログラムを実行した人は、あたかも問題なく処理が終わったかのように見えてしまいます。

つまり、例外が起きたか起きていないか、判断できなくなります。

このように、例外があたかもなかったかのように見せかけることを「例外を握り潰す」と言ったりします。

このような例外の握り潰しは、エラーの見落としにつながるので、非推奨な行為です。

ソースコード(例外の握り潰し)

実行結果

処理前
操作が完了しました

~プログラミングを勉強してみませんか?~

TechAcademy [テックアカデミー] 無料の体験講座が用意されているので、気軽に体験できます。

※私(サイト主)も無料体験講座を実際に受けてみました(→感想)

     

コメントを残す

*

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)