- PR -

catch句内の例外処理

投稿者投稿内容
MGS
会議室デビュー日: 2006/04/10
投稿数: 4
投稿日時: 2006-04-10 17:31
はじめて投稿させていただきます、MGSです。

例外処理についてお知恵を拝借したいのです。
例のようなケースで例外発生時にcatch句の中で後処理のようなことを
したときに再度例外が発生した場合通常どのように処理するのでしょうか?
条件は
 ・自作のライブラリ内で呼び元に例外情報を返したい

何もしないと最後に発生した例外が呼び元で処理されますが最初の例外情報も
返さないといけないかなぁと思うのですがこのようなケースは皆さんどのように
処理されていますか?

コード:
try{
    処理
}
catch( Exception exFirst ){
    try{
        エラー後処理(トランザクションのRollbackとか)
    }
    catch( Exception exSecond ){
    }
}



よろしくお願いします。
じゃんぬねっと
ぬし
会議室デビュー日: 2004/12/22
投稿数: 7811
お住まい・勤務地: 愛知県名古屋市
投稿日時: 2006-04-10 17:38
引用:

MGSさんの書き込み (2006-04-10 17:31) より:

例外処理についてお知恵を拝借したいのです。
例のようなケースで例外発生時にcatch句の中で後処理のようなことを
したときに再度例外が発生した場合通常どのように処理するのでしょうか?


私の場合、今回の例ですと例外機構を設けません。
Catch 句内は Rollback のみで、Application.ThreadException 逝きですね。

_________________
C# と VB.NET の入門サイト
じゃんぬねっと日誌
ひろれい
ぬし
会議室デビュー日: 2006/03/02
投稿数: 486
お住まい・勤務地: 万博開催地
投稿日時: 2006-04-10 17:54
引用:

じゃんぬねっとさんの書き込み (2006-04-10 17:38) より:

私の場合、今回の例ですと例外機構を設けません。
Catch 句内は Rollback のみで、Application.ThreadException 逝きですね。


私は、

例外は、むやみにキャッチしちゃダメよ


で勉強させていただきました。
MGS
会議室デビュー日: 2006/04/10
投稿数: 4
投稿日時: 2006-04-10 18:21
早速の回答ありがとうございます!
#席をはずしているうちにレスがついて驚いています。

引用:

私の場合、今回の例ですと例外機構を設けません。
Catch 句内は Rollback のみで、Application.ThreadException 逝きですね。



何もしないってのもありですか〜
そうすると今回の例だと「exSecond」の情報のみApplication.ThreadExceptionで
catchできて「exFirst」はできないと思うのですがそれは仕方ないということでしょうか?

的外れなことをいってるかもしれませんがご教授ください。
よろしくお願いします。
じゃんぬねっと
ぬし
会議室デビュー日: 2004/12/22
投稿数: 7811
お住まい・勤務地: 愛知県名古屋市
投稿日時: 2006-04-10 18:38
引用:

MGSさんの書き込み (2006-04-10 18:21) より:

そうすると今回の例だと「exSecond」の情報のみApplication.ThreadExceptionで
catchできて「exFirst」はできないと思うのですがそれは仕方ないということでしょうか?


しかるべき処置中に例外になっては、どのみち続行不可能だと思うのですが...
あくまで例であり処置が考えうるというのであれば、入れ子にすれば良いんじゃないでしょうか。

引用:

最初の例外情報も返さないといけないかなぁと思うのですが


これは、どの例外で起きたのか判別さえできれば良いということでしょうか。
例外を「返す」というのに、少し違和感を感じているので、読み違えているかもしれません。

_________________
C# と VB.NET の入門サイト
じゃんぬねっと日誌
MGS
会議室デビュー日: 2006/04/10
投稿数: 4
投稿日時: 2006-04-10 19:07
引用:

これは、どの例外で起きたのか判別さえできれば良いということでしょうか。
例外を「返す」というのに、少し違和感を感じているので、読み違えているかもしれません。



最初の書き方がまずかったですね。。。

   ライブラリをコールしている箇所ではtry-catchで例外をcatchして
   catchした情報を元にメッセージ表示やログに残す

ようにしたいので、

   自作ライブラリで例のように複数例外が発生した場合に呼び元に
   複数例外が発生したことを伝えないといけないか?

ということを考えていました。メッセージはともかくログには発生した例外を
全部残すべきなのかな?と思いまして。

そんなことをいろいろ考えていて通常どうするのかなぁと思いました。

  ・最後の例外だけでいい
  ・全部伝えないとダメ
  ・根本的に何か違う

たびたびすみませんがよろしくお願いします。
ぶさいくろう
ぬし
会議室デビュー日: 2005/11/22
投稿数: 1232
お住まい・勤務地: 川崎市(は俺も含めてロクな人間が住んでないよw)
投稿日時: 2006-04-10 19:27
なんか根本的にちがってるような気がする。(あくまで気がする)
ログをどうやってるのかわかんないけど、例外が発生した時点で書けばいいんでないの?
ロギングって何をつかってる?

InnerExceptionに詰め込んでお持ち帰りするのも手かもしれんけど邪道っぽい。
MGS
会議室デビュー日: 2006/04/10
投稿数: 4
投稿日時: 2006-04-10 20:18
回答ありがとうございます。

引用:

なんか根本的にちがってるような気がする。(あくまで気がする)
ログをどうやってるのかわかんないけど、例外が発生した時点で書けばいいんでないの?
ロギングって何をつかってる?

InnerExceptionに詰め込んでお持ち帰りするのも手かもしれんけど邪道っぽい。



ログの実装はまだなのです・・・何らかの方法でファイルに書こうとは思っているのですが。
例外が発生した時点で書くのがいいのかもしれませんね。
呼び元で「一回だけメッセージを表示する」ことにこだわりすぎてました。

スキルアップ/キャリアアップ(JOB@IT)