try 〜 except 文について

解決


がんじがらめ  2005-04-18 20:22:54  No: 14364

こんにちは

こんな感じのプログラムを
-----------------------------------
try
    :
  if ・・・ then <<エラー処理>>
  if ・・・ then <<エラー処理>>
    :
except
  <<エラー処理>>
end;
-----------------------------------
↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓
実際にはコンパイルすらできませんが
↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓
-----------------------------------
label ErrorProcess;
begin
 try
    :
  if ・・・ then goto ErrorProcess;
  if ・・・ then goto ErrorProcess;
    :
 except
ErrorProcess:
  <<エラー処理>>
 end;
    :
end;
-----------------------------------
要するに同じエラー処理の部分は
一つにまとめたいというものなんですけど
初歩的なことですみません。
以下の様に無理やり例外発生させれば可能ですが、
すっきりいかなくって・・・
-----------------------------------
var
 a,b: Integer;
try
  a := 0;
    :
  if ・・・ then b := b / a;
  if ・・・ then b := b / a;
    :
except
  <<エラー処理>>
end;


kkk  2005-04-18 20:40:49  No: 14365

raiseを使用してください。


にしの  2005-04-18 21:13:33  No: 14366

こんな感じでしょうかね。

try
  if ... then raise Exception.Create('1');
  if ... then raise Exception.Create('2');
except
  on e: Exception do
  begin
   if e.message = '1' then ...
  end;
end;


がんじがらめ  2005-04-18 22:45:35  No: 14367

ありがとうございます。

ところで、Create に対する Free および Destroy
は必要ないのでしょうか?


にしの  2005-04-18 23:26:04  No: 14368

例外が適切に処理されていれば、自動的に呼び出されます。

EHantei=class(Exception)
public
  destructor Destroy; override;
end;

destructor EHantei.Destroy;
begin
  ShowMessage('EHantei.Destroy');
  inherited Destroy;
end;
というような例外クラスを作成して確認しました。
Exception.Createのかわりに、EHantei.Createしてみると解ります。
except処理が終了すると、破棄されています。


がんじがらめ  2005-04-19 18:32:01  No: 14369

kkk さん  にしの  さん
うまくいってるようです。
ありがとうございました。


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加