有一个库(我无法控制),其中包含一个名为 Inner 的函数,它会引发类型 StupidException 的异常。我正在编写一个名为 Outer 的函数,该函数调用 Inner 。我不能提前告诉我什么时候会出现 StupidException ,我无法以任何合理的方式处理它。我不希望我的函数外部的调用者看到 StupidException - 我将通过从 Outer <返回null来向他们传达这种情况/ strong>,而不是(由于几个原因)。所以,在我看来,最合理的代码是:
public thing Outer()
{
thing result = null;
try
{
result = Inner();
}
catch(StupidException ex)
{
// do nothing
}
return result;
}
我已经阅读了关于空陷阱是如何邪恶的严厉警告,因为它“吞噬”了异常。吞下异常正是我想要做的事情,实际上,这里空的捕获块对我来说仍然感觉不对。有没有更好的办法?
答案 0 :(得分:8)
如果这会让你感觉更舒服,你可以从catch块返回,这样它看起来不会是空的:
public thing Outer()
{
try
{
return Inner();
}
catch
{
return null;
}
}
如果意图是吞下例外,那就没问题了。您可能只想验证此内部函数可能抛出的异常类型,以便仅捕获它们而不是捕获所有异常。例如,您可以联系此代码的作者,以询问他们的代码可能抛出的异常类型,然后仅针对这些异常。
答案 1 :(得分:0)
您需要列出所有预期的异常,您可以从内部获取并仅捕获这些异常。这是正确的解决方案。