C#のfinallyキーワードとは?例外の有無にかかわらず処理を実行する方法を解説
C#のfinallyキーワードは、例外が発生したかどうかにかかわらず、必ず実行したい一連の処理を記述するためのブロックです。例えば、ファイルを開いた場合、例外の発生有無に関係なく必ずファイルを閉じる必要があります。このような「後処理(クリーンアップ処理)」を確実に行うために、finallyブロックが活用されます。
finallyの構文
finallyブロックの基本的な構文は以下のとおりです。
try {
// 例外が発生する可能性のある処理
} catch( ExceptionName e1 ) {
// エラー処理コード
} catch( ExceptionName e2 ) {
// エラー処理コード
} catch( ExceptionName eN ) {
// エラー処理コード
} finally {
// 必ず実行される処理
}tryブロック内で例外が発生した場合は対応するcatchブロックが実行され、その後finallyブロックが実行されます。例外が発生しなかった場合でも、catchブロックをスキップしてfinallyブロックは必ず実行される点が重要です。
finallyブロックの使用例
ここで、finallyブロックを実装した具体例を見てみましょう。以下のコードでは、ゼロ除算を試みて例外をキャッチした後、finallyブロック内の処理が実行されます。
using System;
public class Demo {
int result;
Demo() {
result = 0;
}
public void division(int num1, int num2) {
try {
result = num1 / num2;
} catch (DivideByZeroException e) {
Console.WriteLine("Exception caught = {0}", e);
} finally {
Console.WriteLine("Result = {0}", result);
}
}
public static void Main(string[] args) {
Demo d = new Demo();
d.division(100, 0);
}
}実行結果
上記のプログラムを実行すると、次のような出力が得られます。
Exception caught = System.DivideByZeroException: Attempted to divide by zero. at Demo.division(Int32 num1, Int32 num2) in d:\Windows\Temp\n0kebv45.0.cs:line 11 Result = 0
この例では、100 ÷ 0 の除算によってDivideByZeroExceptionが発生し、catchブロックで例外メッセージが出力されています。その後、例外の発生に関係なくfinallyブロックが実行され、「Result = 0」が出力されていることが確認できます。
finallyブロックのポイント
finallyブロックを活用する際の主なポイントは以下のとおりです。
・必ず実行される:例外の発生有無にかかわらず、finally内の処理は必ず実行されます。
・リソース解放に最適:ファイルやデータベース接続などのクローズ処理に適しています。
・return文があっても実行される:tryやcatchブロック内にreturn文があっても、finallyブロックはメソッド終了前に実行されます。
・省略可能:後処理が不要な場合は、finallyブロックを省略できます。
このように、finallyキーワードを使うことで、例外処理の流れの中でも確実に実行したい処理を安全に記述でき、堅牢なプログラムの実装につながります。
-
Pythonのassert文の使い方:独自のエラーメッセージでエラーをわかりやすく表示する
どのプログラミング言語にも、プログラム実行中に発生した例外を処理する仕組みが備わっています。Pythonではassertキーワード(assert文)を使用することで、システムが自動生成するエラーメッセージではなく、開発者が自由に定義したエラーメッセージを表示できます。これにより、エラーが発生した際の原因特定と修正が格段にしやすくなります。assert文の基本構文assert文は次のように記述します。assert 条件式, エラーメッセージ条件式がTrueであれば何も起こらず、プログラムはそのまま続行されます。一方、条件式がFalseと評価された場合にはAssertionErrorが発生し、指定
-
Pythonのキーワード完全ガイド:予約語の一覧と使い方
他のプログラミング言語と同様に、Pythonにも予約語(キーワード)が存在します。これらの単語は特別な意味を持ち、命令やパラメータとして機能します。キーワードは変数名や関数名、クラス名などの識別子として使用することはできません。 Pythonのキーワード一覧 TrueFalseclassdefreturn ifelifelsetryexcept raisefinallyforinis notfromimportgloballambda nonlocalpasswhilebreakcontinue andwithasyielddel orassertNone