【发布时间】:2011-10-13 13:47:21
【问题描述】:
在处理异常时附加一个通用异常捕获是一种好习惯吗?一个例子可以让这个问题更清楚
try{
// do something
}catch(spomespecificException1 ex){
//logging and other stuff
}catch(spomespecificException2 ex){
//logging and other stuff
}catch(Exception ex){
//logging and other stuff
}
我应该将异常捕获附加到堆栈中
【问题讨论】:
-
这实际上取决于情况的上下文,并且可能也相当主观。如果没有更多细节,我认为你真的不能说是或否。
-
我的一般经验法则是在会中止工作单元但让进程继续的点捕获一般异常。也就是说,如果我有一个订单处理服务,并且我正在下订单,我想捕捉下订单的任何异常,所以我不会关闭服务,但任何比这更深的东西都不应该被捕获和消费.在我看来,这与 John 的 Handle/Fix 定义一致。但那是我……
-
@JamesMichaelHare:你怎么知道关闭服务可能不是正确的事情?也许该服务已损坏,以至于当它不抛出异常时,它正在破坏订单。关闭服务(并通知您以便您尽快修复它)可能是正确的做法。
-
@John:这总是一种选择。但是,如果它同时取消当前正在处理的其他订单,也可能导致可怕的财务后果。我们向监控工具报告所有异常以及所有性能计数器,以便我们可以从仪表板查看应用程序的状态,包括抛出的异常。