E2145 例外の再生成は例外ハンドラ内でのみ許されます (Delphi)
エラーと警告のメッセージ(Delphi) への移動
例外を再生成する raise 文の構文を使用しましたが,コンパイラはその再生成が例外処理ブロックの外で起きたと判断しました。現在の例外処理メカニズムの制約により,ネストした例外ハンドラからの例外の再生成はできません。
program Produce; procedure RaiseException; begin raise; (*ケース 1*) try raise; (*ケース 2*) except try raise; (*ケース 3*) except end; raise; end; end; begin end.
{ このエラーにはいくつかの原因が考えられる。第 1 に例外ハンドラの外部で例外コンストラクタを持たない raise を指定した可能性がある。第 2 に例外ハンドラの try ブロックで例外を再生成しようとした可能性がある。第 3 に別の例外ハンドラの中にネストした例外ハンドラの中で例外を再生成しようとした可能性がある }
program Solve; uses SysUtils; procedure RaiseException; begin raise Exception.Create('case 1'); try raise Exception.Create('case 2'); except try raise Exception.Create('case 3'); except end; raise; end; end; begin end.
このエラーでは新しい例外を明示的に生成するのが 1 つの解決方法である。「case 1」と「case 2」のような場合はそれを意図したと思われる。「case 3」の場合には,コードを調べて求める結果が得られるような適切な回避方法を判別する必要がある