構造化例外処理と非構造化例外処理に適した状況

更新 : 2007 年 11 月

構造化例外処理は、例外、分離されたコード ブロック、およびフィルタを含む制御構造を使用して、例外処理機構を作成します。構造化例外処理を使用すると、エラーの種類を区別し、状況に応じた処理を行うことができます。非構造化例外処理では、コードの先頭に配置された On Error ステートメントがすべての例外を処理します。

解説

構造化例外処理は、非構造化例外処理と比べて、汎用性、信頼性、柔軟性の面でかなり優れています。できれば、構造化例外処理を使用してください。ただし、次の状況では、非構造化例外処理を使用することもできます。

  • 以前のバージョンの Visual Basic で作成したアプリケーションをアップグレードする場合

  • アプリケーションの暫定版を開発しており、プログラムが正常に終了しなくてもよい場合

  • 例外のはっきりした原因が前もってわかっている場合

  • 期限が迫っており、すばやく処理する必要があり、スピードの柔軟性を犠牲にする場合

  • コードが短く、例外を生成するコード部分だけをテストすればよい場合

  • 構造化例外処理でサポートされていない Resume Next ステートメントを使用する場合

同じ関数の中で構造化例外処理と非構造化例外処理を組み合わせることはできません。On Error ステートメントを使用する場合、同じ関数内で Try...Catch ステートメントは使用できません。

コードでどちらの例外処理を使用するかに関係なく、コードの作成に着手する前に、コードの前提条件を検討する必要があります。たとえば、ユーザーに電話番号の入力を求めるアプリケーションの場合、次の前提条件が考えられます。

  • ユーザーは文字ではなく数字を入力する。

  • 番号は一定の形式になっている。

  • ユーザーは null 文字列を入力しない。

  • ユーザーの電話番号は 1 つである。

ユーザーの入力がこれらの前提条件のいずれかまたはすべてに違反する可能性があります。信頼性の高いコードにするには、アプリケーションがこうした違反から正常に回復できるための十分な例外処理が必要です。

メソッドがどのような状況でも決して例外をスローしないと保証できない限り、ユーザーに通知を行う例外処理を検討してください。例外処理では、十分な情報を出力するようにしてください。例外処理のメッセージでは、エラーの発生を示すだけでなく、エラーの原因と場所も示す必要があります。"エラーが発生しました" だけしか情報がないメッセージでは、ユーザーをいらいらさせるだけです。

参照

処理手順

例外処理のトラブルシューティング

概念

エラーの種類

Visual Basic の構造化例外処理の概要

非構造化例外処理の概要