例外の再生成

提供: RAD Studio
移動先: 案内検索

例外ハンドラの記述 への移動


例外をローカルで処理する際、封入ブロック内の処理を、他と置き換えるより、むしろ増やしたい場合もあるでしょう。もちろん、ローカル ハンドラがその処理を終えれば、それが例外インスタンスを破壊するので、封入ブロックのハンドラが動作することはありません。しかし、その例外を破壊しないようにし、括弧内のハンドラが応答する機会を与えることもできます。これには、引数なしの raise コマンドを使用します。これを、例外の再生成または再送出と言います。次の例で、このテクニックを示します:

 try
 { statements }
   try
 { special statements }
   except
     on ESomething do
     begin
 { handling for only the special statements }
       raise;{ reraise the exception }
     end;
   end;
 except
   on ESomething do ...;{ handling you want in all cases }
 end;

statements 内のコードが ESomething 例外を起こすと、外側の例外処理ブロックのハンドラのみが実行されます。しかし、special statements 内のコードが ESomething を起こすと、内側の例外処理ブロックの処理が実行され、続いて、外側の例外処理ブロックのより汎用的な処理が行われます。例外を再生成することにより、簡単に特殊ケースにおける例外のための特別な処理を、既存のハンドラを失う(または重複させる)ことなく、提供することができます。

ハンドラが別の例外を送出したい場合、「例外の生成」での説明の通り、raise 文または throw 文を通常の通り使用します。

関連項目