例外処理の基本
例外処理とは
例外処理とは、例外が発生した場合の対処をするための処理のことを言います。
例外の種類
- 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]); }
ディスカッション
コメント一覧
まだ、コメントがありません