ホーム > VB.NET, コンピュータ > VB.NET Tips Try…Catch…Finallyでエラー制御

VB.NET Tips Try…Catch…Finallyでエラー制御

2009 年 4 月 11 日

Try...Catch...Finally ステートメントでエラー処理

photo by DiscoWeasel

ソフト開発において、避けて通れないのがエラー制御でしょう。

なんとしてでも、強制終了「ブチッ」……は、避けたい所です。

強制終了するにしても、なにかメッセージを提示して終了させたい。

VB.NET(.NET Framework)から導入された
Try…Catch…Finallyステートメントですが、VB6.0までのエラー処理の、On Error Gotoとは、かなり違います。

概念の違い

VB.NET

Try…Catch…Finally
構造化例外処理

VB6.0

On Error Goto
非構造化例外処理

この、呼び方がすべてを物語っているように思えます。

と…、方向性が違う、違う、VB6.0との比較ではなく、VB.NET(.NET Framework)におけるTry…Catch…Finallyステートメントの使用方法をエントリーします。

必須文

Try
先頭文。必須です。Tryブロックこれがなくては、始まりません。
End Try
終端文。必須です。Try…Catch…Finally 構造の終わりを表します。

必ず、使用するのは、この2つ、”Try ~ End Try”。

後は、使用用途に応じて、使い分けていく必要があります。

ま、”If ~ End If”、”Sub ~ End Sub” と同じで、始まりと終わりを記述します。

オプション

省略可能なオプションブロックとして次ぎのものがあります。
Catchステートメントは複数のIf文があって、else文が単独であるって感じかな

Catchブロック
複数の Catch ブロックを指定できます。
Try ブロックの処理中にエラーが発生すると、Catch ステートメントに処理が移り、そのエラーをCatchステートメントで処理できるか判定されます。

Try ~ Catch の間でエラーが発生した場合、処理がCatchに移ります。

Catchには、exception (任意の変数)と、type(クラスフィルタの種類)のオプションがあります。exceptionを指定するか、しないかで処理が変わってきます。

Catchのみ(exception(エラー値)指定なし。)
エラー値を判定しないのだから、当然、すべてのエラー処理はここで処理されます。
exception使用
exception(任意の変数)にエラーの値が入ります。
このエラーの値が

type(クラスフィルタの種類)と同じなのかどうか判定します。

  • exception(エラー値)と同じエラーの場合、エラー処理を行います
  • exception(エラー値)と違うエラーの場合、エラー処理は行わず、このCatch文からは処理を抜けます。

Whenブロックは、私的にはあまり使用したことはないのですが。

Whenブロック
Catchブロックに制御がうつり、exception(エラー値)と同じエラーだった場合、さらに、絞り込むといった感じです。

Finallyブロックで、エラー発生時に、ファイルをクローズしたい、メモリを解放したいなどの処理が行えます。

Finallyブロック
Try ステートメントから抜けるとき、必ず Finally ブロックが実行されます。

Exit Try は、For構文の”Exit For” Sub構文の”Exit Sub” などと同じ感じで、処理を途中で抜けさせる役目をもっています。

Exit Try
Try…Catch…Finally 構造から抜けます。
そして、End Try ステートメントの次のコードに制御が移ります。
注意:Finally ステートメントは必ず実行されますが、Finally ブロック内には記述できません。

特性、注意点

変数のスコープ
Tryブロックと、Catchブロックは別々のステートメントとして扱われるので、Tryブロック内で宣言された変数をCatchブロック内で使用することはできない。
両方のブロックで、使用したいときは、Try…Catch…Finally の外で宣言しておく必要があります。
CatchブロックがTry ~ End Try内に一つもないとき
Finallyブロックを含める必要があります。このときだけ、Finallyブロックが必須となります。

exceptionについて

Catchブロックで、エラー値として用いられるexception値ですが、このエラー値は、Exception クラスのインスタンス、Exception クラスから派生したクラスです。

このExceptionクラスのインスタンスには、エラー番号やメッセージなどのエラー情報が含まれます。

関連するエントリー

    None Found

VB.NET, コンピュータ , , , , , , , , , ,

  1. コメントはまだありません。
  1. トラックバックはまだありません。