- - PR -
Try の中
投稿者 | 投稿内容 | ||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 2008-03-03 02:02
便乗質問ですみませんが、
握りつぶしたいときはどうしたらいいのでしょうか? 私はcatchで握りつぶしてしまってます…。 | ||||||||||||
|
投稿日時: 2008-03-03 22:15
間違いました。 チェックすれば発生させずに済ませられる例外を、発生させて握りつぶしてはいけません。 …なんか、まだ考えを適切に表現できていないように思うので、突っ込んでください(反応鈍いですが)。 なんか、一部だけ見ているからだと思うけど、2008-02-29 13:44 のコードって、イミフメイ...
こっち使おう。 このコードで、try ブロックでどんな例外が発生する可能性があるのか。このスケルトン コードからは、その考察がされていないことが伺えます。特に、Exception しか受けていないことから。それは、設計としてあり得ないと思います。そもそも、.NET Framework での例外は、仕様による想定の範囲外の事象が発生したときに、安全にプログラムを終了、または続行させられるように使うよう、勧められています。もっとも、「どこまで仕様として想定するか」については、これまでも何度か議論されていますし、明確な線引きができないところであると思っています。 また、catch ブロックでは、例外のリスローがされていません。一部しか見ていないので適切な判断はできませんが、リスローしなくていいのか、考察がされていないように思います。特に、Me.Close というのが気になります。このメソッドがあるクラス、いったいなんでしょう? ここで、「パス取得」「INIファイル(からデータを取り出す)」「DataSet取得」という処理がありますが、どれも例外が発生する可能性があります。パスの取得に失敗すれば、INI ファイルの取得はできないでしょう。INI ファイルからデータが取れなければ、DataSet からデータを持ってくるためのデータが整わないことが考えられます。そういった、メソッドの中断処理が、例外によって行われているような感じもします。その時に Me(ってなんだ?)を閉じていいのでしょうか。もう一歩進めば、Me を開くのは、パス取得と INI ファイルの処理が済んでからでもいいのではないでしょうか。そうすればここで Me を閉じる必要はなく、例外処理によって Close をさせる必要もないと思います。 つまり、このコードは、「Me.Close をしたいがために、例外を発生させている」ように思います。これは、してはいけないことだと思います。 | ||||||||||||
|
投稿日時: 2008-03-04 00:18
質問者の提示したコードに関して、ということだったのですね。 読解力不足。 お騒がせしてすみませんでした。 #例外を握りつぶす違う方法があるのかとおもってドキドキしてしまいました。 | ||||||||||||
|
投稿日時: 2008-03-04 07:14
On Error Goto のことが書いてあったので、「それと同じに扱っちゃダメよ」…でよかったですね。
こちらこそすみません。 | ||||||||||||
|
投稿日時: 2008-03-04 08:02
NAL-6295です。
蛇足ですが、VisualStudio2005以降であれば、 tryf+[tab]でtry-catchではなくtry-finallyが生成されますので、楽ですよ。
一応紹介されていたので、リンクを貼っておきます。 http://d.hatena.ne.jp/NAL-6295/20050909/p1 [ メッセージ編集済み 編集者: NAL-6295 編集日時 2008-03-04 08:04 ] | ||||||||||||
|
投稿日時: 2008-03-04 16:08
こんにちは。
多くの方々、ありがとうございます。 この件でもう少しお聞きしたいことがあります。 とにかくエラー処理は Tryを使おうと思いますが Private Sub Form_Load Try Call INIファイルREAD処理 Call ASyori Catch ex As Exception MsgBox("エラー") End Try End Sub '**** Private Sub ASyori() Try 処理 Catch ex As Exception MsgBox("エラー") End Try End Sub と書いた場合ASyoriで Catch ex As Exception を書いている為ASyoriでエラーが起こった場合 エラーの記述がダブります。 でもINIファイルREAD処理の中で Try文を書いていなかったら Form_LoadのTry文に引っかかります。 このような書き方は皆さんは しないのでしょうか? | ||||||||||||
|
投稿日時: 2008-03-04 16:36
ダブルというのは結果論です。>そう設計したのだから。 MsgBoxはユーザー対話インターフェースです。 要はUI処理と業務ロジックを適切に分離する必要があると思います。 | ||||||||||||
|
投稿日時: 2008-03-04 16:46
何をどうしたいかに拠ります。 どこで発生した例外をどこでどうしたいのか、 それに拠って。 例外処理が二重になったり、 ユーザーにプロンプトしたり 再スローしたり、 握りつぶしたり、 いろいろです。 |