我刚刚看到一个关于try-catch的问题,哪些人(包括Jon Skeet)认为空catch块是一个非常糟糕的主意?为什么呢?在任何情况下,空接点都不是错误的设计决策吗?
我的意思是,例如,有时你想从某个地方(webservice,数据库)获得一些额外的信息,你真的不关心你是否会得到这个信息。所以你试着获取它,如果发生了什么,没关系,我只会添加一个“catch (Exception ignored){}”,仅此而已
我刚刚看到一个关于try-catch的问题,哪些人(包括Jon Skeet)认为空catch块是一个非常糟糕的主意?为什么呢?在任何情况下,空接点都不是错误的设计决策吗?
我的意思是,例如,有时你想从某个地方(webservice,数据库)获得一些额外的信息,你真的不关心你是否会得到这个信息。所以你试着获取它,如果发生了什么,没关系,我只会添加一个“catch (Exception ignored){}”,仅此而已
当前回答
空捕获块表示程序员不知道如何处理异常。它们正在抑制异常可能出现的冒泡,并由另一个try块正确处理。总是尝试做一些你正在捕捉的例外。
其他回答
我认为完全空的catch块是一个坏主意,因为没有办法推断忽略异常是代码的预期行为。在某些情况下,接受异常并返回false或null或其他值并不一定是坏事。.net框架有许多“try”方法都是这样操作的。根据经验,如果应用程序支持日志记录,则添加注释和日志语句。
我发现最令人讨厌的空catch语句是其他程序员做的。我的意思是,当您需要调试别人的代码时,任何空的catch语句都会使这种工作变得更加困难。恕我直言,catch语句应该总是显示某种错误消息——即使错误没有被处理,它至少应该检测到它(只在调试模式下启用)
因为如果抛出异常,您将永远不会看到它——默默地失败是最糟糕的选择——您将得到错误的行为,而且不知道它发生在哪里。至少在那里放一条日志消息!即使是“不可能发生”的事情!
空的catch块通常被放入,因为编码器并不真正知道他们在做什么。在我的组织中,一个空的catch块必须包含一个注释,说明为什么不处理异常是一个好主意。
与此相关的是,大多数人不知道try{}块后面可以跟catch{}或finally{},只有一个是必需的。
如果你不知道在catch block中要做什么,你可以只记录这个异常,但不要让它空着。
try
{
string a = "125";
int b = int.Parse(a);
}
catch (Exception ex)
{
Log.LogError(ex);
}