例外処理の基本
例外処理とは
例外処理とは、例外が発生した場合の対処をするための処理のことを言います。
例外の種類
- 3/0のような、演算不可能な処理
- ファイルがないのに読み込もうとした
- クラス型変数宣言のみをした変数(new でインスタンスを作っていない)
- 配列の範囲外にアクセスした。(a[3]のところ、a[5]にアクセスした。など)
例えば、次のようなコードがあった場合、
int a = 0;
int b = 3 / a;
結果
Attempted to divide by zero.
と表示され、ビルドできません。なので実行前に気づけます。
例外が発生するサンプル
int a = int.Parse(Console.ReadLine());
int b = 3 / a;
だったらどうでしょう。
aは入力されるまでわからない(何を入力されるか)ので、ビルドでエラーなりません。
プログラムを実行して、0が入力されて初めてエラーになるのです。
さらに、そのエラーは処理ができないので、プログラムが強制的にストップしてしまいます。
例外処理のサンプル
そこで、次のコードのようにエラーが発生する可能性があるコードをtryブロック内に記述し、例外エラーが発生した場合は、catchブロックで処理するようにします。
try
{
int a = int.Parse(Console.ReadLine());
int b = 3 / a;
}
catch
{
Console.WriteLine("0では割れません");
}
結果
0では割れません
と表示されるようになり、プログラムは実行を継続できます。
例外情報の取得
次のようなコードで、エラー内容を表示することもできます。
try
{
int a = int.Parse(Console.ReadLine());
int b = 3 / a;
}
catch (Exception ex)
{
Console.WriteLine("0では割れません");
Console.WriteLine($"エラーは、{ex.Message}です");
}
結果
0では割れません
エラーは、Attempted to divide by zero.です
例外処理導入について
例外処理は、他の処理に比べて低速のため、なんでもかんでも追加しないようにします。正常系の処理には使いません。
❌使ってはいけない例
int[] array = { 1, 2, 3 };
try
{
int i = 1;
while (true)
{
Console.WriteLine(array[i]);
i++;
}
}
結果
2
3
範囲外のエラーです
エラーは、Index was outside the bounds of the array.です
例外処理を使わずに対応したコード
この場合は、次のコードで十分です。
foreachで配列要素数分だけ処理を実施しています。
int[] array = { 1, 2, 3 };
foreach (var item in array)
{
Console.WriteLine(item);
}
int[] array = { 1, 2, 3 };
for (int i = 0; i < array.Length; i++)
{
Console.WriteLine(array[i]);
}
ディスカッション
コメント一覧
まだ、コメントがありません