为什么最好在callstack中捕获异常,而不是一旦可以处理它?

Muh*_*han 6 architecture exception-handling

我在几个地方读到,最好能够在callstack中捕获更高的异常,但是我还没能找到这个陈述的理由.

Scott Hanselman:请记住,Application_Error存在.尽可能高地捕获异常,而不是低.

我认为异常应该在可以处理的地方被捕获,高或低并不重要.这不是真的吗?如果不是那么为什么?

如果可能,请在答案中添加一个示例.

谢谢

Cal*_*leb 5

您应该在代码中捕获异常,您可以在其中执行某些操作.通常,生成异常的代码无法处理问题,但调用该代码的方法或调用该代码的方法调用的方法可以优雅地处理问题.

假设您有一些尝试打开文件并读取某些数据的代码,如果该文件不存在,则会生成异常.在那个范围内的代码不能做多少但是保释,但调用堆栈的几个框架调用方法可能会说"哦,好吧,有一个例外.我会尝试这个备用文件"或"我猜那个文件没有"存在,所以我会继续创造一个新的."

这实际上是异常的一大好处:它们使开发人员不必立即处理所有可能的错误情况.您可以编写代码,期望它在大多数情况下都能正常工作,并且您的代码不需要因为大量错误处理而混乱.只要您宣传可能引发的异常,就可以使代码中的代码更高,以适合该代码尝试的方式解决问题.

  • 没有一些背景,很难说任何具体的东西."它可以更好地捕捉更高的异常" - 好吧,但比什么更高?那写的是什么来源?他们谈论的背景是什么?在某些情况下,一个或两个级别可能不够,在其他情况下可能是完美的.没有规则 - 做有意义的事情. (2认同)