スポンサーリンク
※サイト運営にサーバーは必須です※
 ~このサイトもエックスサーバー
を使用しています~
   
![]()
実行時エラーの一例
まずは、以下のようなコードを考えてみましょう。
ソースコード(言語はC#)
| 
					 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19  | 
						using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace Try02 {     class Program     {         static void Main(string[] args)         {             Console.WriteLine("処理前");             int[] arr = new int[5];             arr[5] = 5;             Console.WriteLine("処理後");         }     } }  | 
					
実行結果
処理前
 ハンドルされていない例外: 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ブロックの処理は実行されません。
ソースコード
| 
					 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30  | 
						using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace Try01 {     class Program     {         static void Main(string[] args)         {             try             {                 Console.WriteLine("処理前");                 int[] arr = new int[5];                 arr[5] = 5;                 Console.WriteLine("処理後");             }             catch             {                 Console.WriteLine("エラーが生じました");             }             Console.WriteLine("操作が完了しました");         }     } }  | 
					
実行結果
処理前
 エラーが生じました
 操作が完了しました
エラーが生じた時にcatchブロックに制御が移るので、以下の文は処理されません。
Console.WriteLine(“処理後”);
それ以外の文は、処理されます。
例外の握り潰し
ここで、catchブロックで何も処理を記述しなかったとします。
この場合、tryブロックで例外が発生したとしても、プログラムを実行した人は、あたかも問題なく処理が終わったかのように見えてしまいます。
つまり、例外が起きたか起きていないか、判断できなくなります。
このように、例外があたかもなかったかのように見せかけることを「例外を握り潰す」と言ったりします。
このような例外の握り潰しは、エラーの見落としにつながるので、非推奨な行為です。
ソースコード(例外の握り潰し)
| 
					 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29  | 
						using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace Try03 {     class Program     {         static void Main(string[] args)         {             try             {                 Console.WriteLine("処理前");                 int[] arr = new int[5];                 arr[5] = 5;                 Console.WriteLine("処理後");             }             catch             {             }             Console.WriteLine("操作が完了しました");         }     } }  | 
					
実行結果
処理前
 操作が完了しました
~プログラミングを勉強してみませんか?~
TechAcademy [テックアカデミー] 
 は無料の体験講座が用意されているので、気軽に体験できます。
※私(サイト主)も無料体験講座を実際に受けてみました(→感想)
 
 
