小编典典

处理异常,这是个好方法吗?

c#

我们正在努力制定一项政策,以正确处理应用程序中的异常。这是我们的目标(概述):

  • 仅处理特定的异常。
  • 仅处理可以纠正的异常
  • 仅记录一次。

我们提供了一个解决方案,该解决方案涉及一个通用的Application Specific Exception,并在一段代码中像这样工作:

try {
  // Do whatever
}
catch(ArgumentNullException ane)
{
  // Handle, optinally log and continue
}
catch(AppSpecificException)
{
  // Rethrow, don't log, don't do anything else
  throw;
}
catch(Exception e)
{
  // Log, encapsulate (so that it won't be logged again) and throw
  Logger.Log("Really bad thing", e.Message, e);
  throw new AppSpecificException(e)
}

将记录所有异常,然后将其转换为AppSpecificException,以便不再记录该异常。最终,它将到达必须采取的最后处理方法。

我对异常处理模式没有太多经验,这是解决我们目标的好方法吗?是否有重大缺陷或大红色警告?

注意:这样
做的缺点之一是,在第一次捕获后,您将失去处理特定异常的能力(如果您调用的方法调用了另一个方法,而第二个方法抛出了异常,则您将无法处理该异常),但是我发现我从未做过任何事情…我只处理一个深度级别的异常…


阅读 208

收藏
2020-05-19

共1个答案

小编典典

如果您在第一次引发异常时就记录了异常,则不会记录完整的堆栈跟踪。

处理
异常(即修复异常),使其尽可能接近引发异常的时间。尽早收集有关上下文的信息。但是,允许异常传播到实际可以处理的地方。日志记录是最后一种处理方式,因此应在应用程序子系统的外层进行。

这应该消除了将特定于应用程序的异常用作标记的必要性,以不记录最初不应该捕获的异常。

2020-05-19