制御構文

[VB.NET] 例外処理(Try-Catch-Finally)の使い方

今回は、VB.NETの例外処理(Try-Catch-Finally)の使い方についてご紹介します。

例外処理とは

プログラムは、実行時にファイルの読み込み失敗や無効な操作など、さまざまな問題によってエラーが発生する可能性があります。

こうした予期しないエラーを例外と呼び、適切に処理しないとプログラムが強制終了してしまうことがあります。

VB.NETでは、これらのエラーを安全に処理し、リソースを正しく解放するためにTry-Catch-Finally構文を用います。

Try-Catch-Finallyの基本構造

強固なアプリケーションを実装するうえで、Tryブロックにエラーが起こりうる処理をまとめ、Catchブロックでエラーを捕捉します。

さらに、エラーの有無にかかわらず必ず実行したい処理をFinallyブロックに書くことで、適切なリソース解放などを実現できます。

以下が最も基本的な構文です。

どんな例外でも処理を継続できるようにするためには、Catchブロックを複数用意して想定される例外を個別に処理できます。

また、Finallyブロックは省略可能ですが、リソースの開放などを行う場合は活用するのがおすすめです。

実用的な具体例

単純な例外処理の例

ここでは、0で割り算をすることで故意に例外を起こしてみます。

実行結果

0で割ろうとしました。エラー内容:Attempted to divide by zero.
後始末を行います。

この例では、DivideByZeroExceptionを先に捕捉し、より限定的な例外に対して適切な対処を行っています。

複数の例外をキャッチする例

次に、ファイルを読み込む場合など、複数の異なるエラーが想定される処理を試してみます。

実行結果

ファイルが見つかりませんでした。
必ず実行される処理です。

このように、Catchブロックを複数用意することで、エラー種別に応じたより詳細な対処を実現できます。

再スロー(Rethrow)の活用例

状況によってはエラーの記録だけ行い、処理を呼び出し元に返したい場合があります。

そのようなときは、Catchブロックで例外情報を簡単に処理した後、Throwキーワードだけを使って再スローします。

実行結果

ログ記録:エラーが発生しました => Index was outside the bounds of the array.
後処理を実行します。
(上位で再びキャッチされる想定)

Throw exを使うとスタックトレースがリセットされます。

オリジナルの例外情報を活かしたい場合は、Throwだけを使用すると良いでしょう。

まとめ

VB.NETの例外処理は、エラーを安全にハンドリングし、プログラムを安定稼働させるうえで欠かせない仕組みです。

Try-Catch-Finallyを正しく活用し、複数のCatchや再スローなどの手法を組み合わせれば、多様なエラーを柔軟に扱うことができます。

リソースの解放はFinallyで行うなど、基本を押さえることでメンテナンス性の高いコードを実現できます。