[解決済み] Try/Catchブロックのネストは悪い考えか?
2023-03-29 09:22:51
質問
例えば、次のような構造があるとします。
Try
' Outer try code, that can fail with more generic conditions,
' that I know less about and might not be able to handle
Try
' Inner try code, that can fail with more specific conditions,
' that I probably know more about, and are likely to handle appropriately
Catch innerEx as Exception
' Handle the inner exception
End Try
Catch outerEx as Exception
' Handle outer exception
End Try
という意見を見かけました。
Try
のようなブロックのネストは推奨されないという意見をいくつか見ましたが、具体的な理由は見つかりませんでした。
これは悪いコードですか?もしそうなら、なぜですか?
どのように解決するのですか?
例えば、メソッド全体に対して1つのtry/catch、ループ内では例外を処理してコレクションの残りの処理を継続したいので別のtry/catchを使用するのが良い状況もあります。
それを行う唯一の理由は、スタックを巻き戻してコンテキストを失う代わりに、エラーになったビットをスキップして続行したい場合です。エディターで複数のファイルを開くのはその一例です。
とはいえ、例外は(その名が示すように)例外であるべきです。プログラムは例外を処理すべきですが、通常の実行フローの一部として例外を回避しようとします。例外処理には計算が必要で ほとんどの場合 言語(Pythonは1つの顕著な例外です)では、計算コストがかかります。
もう1つの有用なテクニックは、特定の例外タイプをキャッチすることです...
Try
'Some code to read from a file
Catch ex as IOException
'Handle file access issues (possibly silently depending on usage)
Catch ex as Exception
' Handle all other exceptions.
' If you've got a handler further up, just omit this Catch and let the
' exception propagate
Throw
End Try
また、エラー処理ルーチンでは、ネストされたtry/catchを使用しています...
Try
Dim Message = String.Format("...", )
Try
'Log to database
Catch ex As Exception
'Do nothing
End Try
Try
'Log to file
Catch ex As Exception
'Do nothing
End Try
Catch ex As Exception
'Give up and go home
End Try
関連
-
[解決済み】プラットフォームが同じでも「不正なフォーマットでプログラムを読み込もうとしました。
-
[解決済み】この動詞型ではcontent-bodyを送信できない
-
[解決済み] NetFx45WebLinkとNetFx45RedistLinkの違いは何ですか?
-
[解決済み] LINQ to Entitiesはメソッドを認識しません。
-
[解決済み] WCFのデバッグ時にサーバーに自動的に踏み込むことができない
-
[解決済み] Try-catchは私のコードをスピードアップさせるか?
-
[解決済み] AssemblyVersion、AssemblyFileVersion、AssemblyInformationalVersionの違いは何ですか?
-
[解決済み】C#で例外をキャッチして再スローする理由とは?
-
[解決済み】再試行キャッチはどのように実装するのですか?
-
[解決済み】try {...} finally {...} は良くて、try {...} catch{} はダメなのはなぜ?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] CLSID {XXXX} を持つコンポーネントの COM クラスファクトリの取得は、次のエラーにより失敗しました: 80040154。
-
[解決済み] ファイル *.mdf をデータベースとして添付できません。
-
[解決済み] 16進数値0x00は無効な文字です。
-
[解決済み] ネットワークの位置からアセンブリをロードすることはできません
-
[解決済み] AssemblyInfo.csは何に使うのですか?
-
[解決済み] ファイルまたはアセンブリをロードできませんでした 操作がサポートされていません。(HRESULT: 0x80131515 からの例外)
-
[解決済み] Moq Callbackについて教えてください。
-
[解決済み] .NET Coreと.NET Standard Class Libraryのプロジェクトタイプの違いは何ですか?
-
[解決済み] Visual Studioの「Any CPU」ターゲットはどういう意味ですか?
-
[解決済み] Javaでは、どのような場合にチェック例外を作成し、どのような場合に実行時例外を作成すればよいのでしょうか。重複