空捕获块

本文关键字: | 更新日期: 2023-09-27 18:01:55

有一个库(我不控制)包含一个名为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块对我来说仍然感觉不对。有没有更好的办法?

空捕获块

如果这样会让你感觉更舒服,你可以从catch块返回,这样它就不会看起来是空的:

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

如果目的是吞下异常,这是可以的。您可能只想验证这个内部函数可能抛出的异常类型,以便只捕获它们,而不是捕获所有异常。例如,你可以联系这段代码的作者,询问他们的代码可能抛出的异常类型,然后只针对这些异常。

您需要所有预期异常的列表,您可以从内部获取并仅捕获这些异常。这是正确的解决方案。

相关文章:
  • 没有找到相关文章