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

标签 c# exception

哇,我刚从外包开发人员那里拿回了一个巨大的 C# 项目,在审查我的代码时,我的分析工具揭示了一堆它认为不好的东西。更令人沮丧的消息之一是:

Exceptions.DontSwallowErrorsCatchingNonspecificExceptionsRule  : 2106 defects 

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

最佳答案

虽然有一些合理的理由可以忽略异常;但是,通常只有特定的异常(exception)情况您才能安全地忽略。如 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”并不是一个很好的迹象。

关于c# - 是否有任何正当理由忽略捕获的异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/204814/

相关文章:

c# - SharePoint 2010,使用 C# 进行反射

c# - 在 Paypal 中创建灵活的定期付款配置文件

c# - 你在哪里存储验证逻辑?

exception - 如何从Solr删除的索引文件中恢复?

ruby - 从开始救援错误返回一个变量

javascript - 将复杂类型从 SignalR hub 传递到 javascript

javascript - 数据集返回 JavaScript AngularJS

python - 如何在 Jupyter 中抑制回溯?

c++ - 三个异常处理版本,哪个更可取?

java - 默认异常处理程序如何工作