3

有一个库(我无法控制)包含一个名为Inner的函数,该函数引发StupidException类型的异常。我正在编写一个名为Outer的函数,它调用Inner。我无法提前知道何时会引发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 回答