try ・・・ except 文について

解決


キャプテン  2005-08-02 01:44:25  No: 16765

try ・・・ except 文で

発生している例外のメッセージを取得する方法および、
取得した特定の例外のときだけ特別な処理を行い
この例外を含むその他の処理に一連の処理を与える方法を
教えてください

以下イメージです。
try
  << 処理1 >>
except
  if << 例えばファイルオープン例外 >> then begin
    ファイルオープンの例外発生時の例外処理
  end;
  << すべての例外に対する処理 >>
end;


Helpに書かれてまっせ  2005-08-02 01:51:13  No: 16766

try
 ...
except
  on EZeroDivide do begin
  //0で割ってしまったときの例外
  
  end;
  on EOverflow do begin
  //オーバーフローしたときの例外
  
  end;
  else begin
  //上記以外の例外
  
  end;
end;


キャプテン  2005-08-02 02:13:52  No: 16767

すみません。
else の使い方がわからなかったもので・・
このような記述をするとは考えられませんでした。
on = if のような考えで以下のように考えてました。

on <例外クラス> begin
end else on <例外クラス> begin
end else begin
end;

結局すべての例外に同じ処理(共通の例外処理)を入れる場合は
以下の方法しかないのでしょうか?

  on EZeroDivide do begin
    //0で割ってしまったときの例外
    //共通の例外処理
  end;
  on EOverflow do begin
    //オーバーフローしたときの例外
    //共通の例外処理
  end;
  else begin
    //共通の例外処理  
  end;


キャプテン  2005-08-02 04:08:27  No: 16768

どうやら、同じ処理を複数にわたって、
記述しなければならないようですね。

except の後ろに
if 文も try ・・・ finally も使えないようです・・・


死者の代弁者  2005-08-02 06:34:26  No: 16769

アマのわりに危険な発言です
> どうやら、同じ処理を複数にわたって、
> 記述しなければならないようですね。
> except の後ろに
> if 文も try ・・・ finally も使えないようです・・・


Basser  2005-08-02 19:18:56  No: 16770

例外の上位クラスでトラップをかけて、
その中で判断すればいいだけでは?
  
  except
    on E:Exception do
    begin
      if E is EFOpenError then
      begin
        //ファイルオープンの例外発生時の例外処理
      end;

      //すべての例外の共通処理

    end;
  end;


キャプテン  2005-08-03 06:38:11  No: 16771

Basser さんどうもです。

on E:Exception do begin
ですか
なるほどです。

ありがとうございました。


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

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






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