很多时候,提到只捕获我可以处理的异常(抛出,包装和/或记录,或执行其他一些操作)。
哪些例外无法处理?这是不应该被抓住的意思吗?我知道不应该捕获可能表示对象引用为null的异常,因为它们是编程错误而不是用户激发的。还有其他例子吗?另一个是ExecutionEngineException
。
此外,catch块中的操作过程是否总是在rethrow,wrap / rethrow和log之间?是否存在需要在catch块中执行某些其他操作的情况?
由于
答案 0 :(得分:15)
通常的建议适用,只能抓住你能处理的东西。框架内部有一个名为IsCriticalException的实用程序函数,它通常被框架代码的一部分用来决定是否吞下异常。不妨再去吧。它考虑以下关键:
这是一个很好的清单。
答案 1 :(得分:12)
我会使用Eric Lippert的建议而不是“致命”例外:
http://blogs.msdn.com/b/ericlippert/archive/2008/09/10/vexing-exceptions.aspx
答案 2 :(得分:0)
catch块中的操作过程可能并不总是重新抛出,包装/回滚和记录。我已经看到db异常(如死锁)导致异常被抛出然后catch逻辑再次尝试执行数据库操作,希望锁定的资源不再被锁定。