一尘不染

是否有任何正当理由忽略捕获的异常

c#

哇,我刚刚从外包开发人员那里得到了一个用C#进行的大型项目,并且在进行代码审查时,我的分析工具揭示了许多被认为是不好的东西。令人沮丧的消息之一是:

Exceptions.DontSwallowErrorsCatchingNonspecificExceptionsRule  : 2106 defects

开发人员向我保证,他们对于所有空的catch块都有充分的理由,有时尝试使用空的catch块可以忽略无用的异常并防止应用程序崩溃。我觉得这是一个完整的BS。我实际查询的一些示例是将记录保存到数据库的数据库调用,在这种情况下,如果忽略了异常,则用户将获得一个好的提示,认为一切都很好,然后继续他们的工作。实际上,他们的工作从未被保存过。我认为这绝对是最可怕的错误。在这种情况下,使用空的catch块尝试抛出该代码是完全错误的。但是我的问题是,“在任何情况下,这都可以接受吗?”
我认为不是,但是众所周知我错了。


阅读 242

收藏
2020-05-19

共1个答案

一尘不染

尽管有一些合理的理由可以忽略例外;但是,通常只有您可以安全忽略的特定例外。正如Konrad
Rudolph
所指出的那样,您可能必须捕获并处理作为框架一部分的错误。并且如osp70所述,您知道可以忽略的框架可能会产生异常。

但是,在这两种情况下,您都可能会知道异常类型,如果知道异常类型,则应该具有类似于以下内容的代码:

try {
  // Do something that might generate an exception
} catch (System.InvalidCastException ex) {
  // This exception is safe to ignore due to...
} catch (System.Exception ex) {
  // Exception handling
}

对于您的应用程序,听起来有些情况下可能适用类似的情况;但是您给出的数据库保存示例即使出现异常也返回“ OK”,并不是一个很好的信号。

2020-05-19