C#のtryキーワードとは?例外処理の基本と使い方を実例付きで解説
C#におけるtryキーワードの役割
C#では、tryブロックを使うことで、例外(エラー)が発生する可能性のあるコード範囲を明示的に指定できます。tryブロックで囲まれたコード内で例外がスローされると、その処理は直後に続くcatchブロックへ移ります。
tryブロックの基本的な構造は次のとおりです。
try {
}tryブロック単体では意味がないため、例外を受け取るためのcatchステートメントも必ずセットで記述します。
try {
// 例外が発生する可能性のある処理
} catch( ExceptionName e1 ) {
// エラー処理のコード
}このように、tryブロック内に「例外を引き起こす可能性のある処理」を書き、catchブロックで「発生した例外への対処」を行います。
try-catch-finallyを使ったサンプルコード
ここでは、0による除算が発生したケースを例に、try・catch・finallyの動作を確認してみましょう。
class Demo {
int result;
Demo() {
result = 0;
}
public void division(int val1, int val2) {
try {
result = val1 / val2;
} catch (DivideByZeroException e) {
Console.WriteLine("Exception caught: {0}", e);
} finally {
Console.WriteLine("Result: {0}", result);
}
}
static void Main(string[] args) {
Demo d = new Demo();
d.division(100, 0);
Console.ReadKey();
}
}コードのポイント
divisionメソッド内で、引数val2による除算をtryブロック内で実行しています。- 第2引数に0を渡すとDivideByZeroException(ゼロ除算例外)が発生します。
- catchブロックで例外を捕捉し、コンソールにエラーメッセージを出力します。
- finallyブロックは、例外の発生有無にかかわらず必ず実行されるため、計算結果の出力に利用しています。
実行結果
上記のコードではd.division(100, 0)が呼ばれた時点で例外がスローされ、catchブロックによって捕捉されます。実行すると、コンソールには次のように表示されます。
Exception caught: System.DivideByZeroException: Attempted to divide by zero. at Program.Demo.division (System.Int32 val1, System.Int32 val2) [0x00000] in <0d240b2120114744a121b66d65545f3f>:0 Result: 0
この出力から、以下のことが確認できます。
- catchブロックが正しく動作し、
DivideByZeroExceptionが捕捉されたこと。 - finallyブロックが実行され、変数
resultの初期値である「0」が出力されたこと。
まとめ
tryキーワードは、C#における例外処理の中核となる仕組みです。「tryで例外が起こりうる処理を囲み、catchで例外を捕捉して対処し、finallyで後処理を必ず実行する」という流れを押さえておくことで、予期しないエラーに対して堅牢なプログラムを書けるようになります。
-
Pythonのassert文の使い方:独自のエラーメッセージでエラーをわかりやすく表示する
どのプログラミング言語にも、プログラム実行中に発生した例外を処理する仕組みが備わっています。Pythonではassertキーワード(assert文)を使用することで、システムが自動生成するエラーメッセージではなく、開発者が自由に定義したエラーメッセージを表示できます。これにより、エラーが発生した際の原因特定と修正が格段にしやすくなります。assert文の基本構文assert文は次のように記述します。assert 条件式, エラーメッセージ条件式がTrueであれば何も起こらず、プログラムはそのまま続行されます。一方、条件式がFalseと評価された場合にはAssertionErrorが発生し、指定
-
Pythonのキーワード完全ガイド:予約語の一覧と使い方
他のプログラミング言語と同様に、Pythonにも予約語(キーワード)が存在します。これらの単語は特別な意味を持ち、命令やパラメータとして機能します。キーワードは変数名や関数名、クラス名などの識別子として使用することはできません。 Pythonのキーワード一覧 TrueFalseclassdefreturn ifelifelsetryexcept raisefinallyforinis notfromimportgloballambda nonlocalpasswhilebreakcontinue andwithasyielddel orassertNone