3

タイプStupidExceptionの例外を発生させるInnerという名前の関数を含むライブラリ (私は制御していません) があります。Innerを呼び出すOuterという名前の関数を作成しています。StupidExceptionがいつ発生するかを前もって知ることはできず、適切な方法で処理することもできません。関数Outerの呼び出し元にStupidExceptionが表示されることは望ましくありません。代わりに、 Outerから null を返すことで状況を伝えます(いくつかの理由から)。したがって、最も合理的なコードは次のように思われます。

public thing Outer()
{
  thing result = null;
  try
  {
     result = Inner();
  }
  catch(StupidException ex)
  {
     // do nothing
  }
  return result;
}

例外を「飲み込む」ため、空の catch ブロックがどのように悪であるかについての厳しい警告を読みました。例外を飲み込むことは、ここで実際にやりたいことですが、空の catch ブロックはまだ正しくないと感じています。より良い方法はありますか?

4

2 に答える 2

8

それがより快適に感じる場合は、空に見えないように catch ブロックから戻ることができます。

public thing Outer()
{
    try
    {
        return Inner();
    }
    catch
    {
        return null;
    }
}

意図が例外を飲み込むことである場合、これは問題ありません。すべての例外をキャッチするのではなく、例外のみをキャッチするために、この内部関数がスローできる例外のタイプを確認したいだけかもしれません。たとえば、このコードの作成者に連絡して、コードがスローする可能性のある例外の種類について尋ね、それらの例外のみをターゲットにすることができます。

于 2013-03-02T13:18:34.590 に答える
0

予想されるすべての例外のリストが必要です。Inner から取得して、これらのみをキャッチできます。それが正しい解決策です。

于 2013-03-02T13:24:19.697 に答える