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

时间:2011-03-27 18:48:06

标签: architecture exception-handling

我在几个地方读到,最好在callstack中捕获更高的异常,但我还没能找到这句话的理由。

Scott Hanselman Remember that Application_Error exists. Catch exceptions as high as you can, not as low.

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

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

由于

3 个答案:

答案 0 :(得分:5)

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

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

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

答案 1 :(得分:1)

  

我认为异常应该被抓到可以处理的地方

绝对。关键是在callstack中你不太可能知道如何处理它。

答案 2 :(得分:0)

我认为你应该在两种情况下捕捉异常:

  1. 您知道如何处理例外
  2. 你用不同的
  3. 包装例外