try ・・・ except 文について

解決


キャプテン  2005-08-01 16:44:25  No: 16765  IP: 192.*.*.*

try ・・・ except 文で

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

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

編集 削除
Helpに書かれてまっせ  2005-08-01 16:51:13  No: 16766  IP: 192.*.*.*

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

編集 削除
キャプテン  2005-08-01 17:13:52  No: 16767  IP: 192.*.*.*

すみません。
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-01 19:08:27  No: 16768  IP: 192.*.*.*

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

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

編集 削除
死者の代弁者  2005-08-01 21:34:26  No: 16769  IP: 192.*.*.*

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

編集 削除
Basser  2005-08-02 10:18:56  No: 16770  IP: 192.*.*.*

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

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

    end;
  end;

編集 削除
キャプテン  2005-08-02 21:38:11  No: 16771  IP: 192.*.*.*

Basser さんどうもです。

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

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

編集 削除