掲示板システム
ホーム
アクセス解析
カテゴリ
ログアウト
例外の扱い方(必須処理の書き方について) (ID:19033)
名前
ホームページ(ブログ、Twitterなど)のURL (省略可)
本文
finally さん、ありがとうございます。 なるほど! あらためて実験してみて目から鱗です。 おっしゃるとおり、finally の仕様について、どうやら大きな誤解をしていたようです。 実験検証に組んでいたコードに(理解に苦しむ)欠陥があり、今まで気づかずにいました。 ご指摘いただいた動作は、以下のコードで一目瞭然でした。 var res: Integer; pp: String; begin pp := 'a'; try try showMessage( '--> pass 1' ); res := StrToInt(pp); showMessage( '--> pass 2' ); except on e: Exception do begin showMessage( '--> pass 3: ' + e.Message ); exit; showMessage( '--> pass 4: ' + e.Message ); end; end; finally showMessage( '--> pass 5' ); end; showMessage( '--> pass 6' ); end; これで、「ふつうは」さんが言われていたことも理解できました。 大変失礼しました。m(__)m ちなみに、今まで使っていた検証用のコードとは、以下のものでした。 var res: Integer; i: Integer; begin i := 0; try try showMessage( '--> pass 1' ); res := 1 div i; showMessage( '--> pass 2' ); except on e: Exception do begin showMessage( '--> pass 3: ' + e.Message ); exit; showMessage( '--> pass 4: ' + e.Message ); end; end; finally showMessage( '--> pass 5' ); end; showMessage( '--> pass 6' ); end; EDivByZero の例外って、計算した瞬間には発生しなくて、その結果(上記で言えば res の値)を参照した時に初めて発生するんですね。 なので、上記のコードでは、実は例外は発生せずに正常終了するのでした。(@_@) これっていいのか??
←解決時は質問者本人がここをチェックしてください。
更新する
戻る
掲示板システム
Copyright 2021 Takeshi Okamoto All Rights Reserved.