Jef*_*eff 5 exception-handling
在编程中总是让我神秘的一件事是使用适当的异常处理.Code Complete指出,通常90%的代码都专注于处理异常.虽然我知道实现基本异常的基础知识,但我还没有找到这样一个重要主题的良好的一般资源.
我正在寻找好的资源(不一定与特定的语言绑定)来学习如何实现良好的异常处理技术.stackoverflow上的大多数异常处理主题似乎都集中在特定语言的特定情况.你的建议是什么?
多年来,我一直是安全关键系统的设计者和编码者,这类系统的关键是鲁棒性,其中一个方面是异常处理.
一些基本的最佳实践:
1)在任何级别,只捕获那些你可以处理的异常."处理"几乎总是意味着重试或放弃你想要做的事情,这通常意味着你应该从发出异常抛出调用的地方捕获异常一级.
2)准确捕获API文档列出的那些例外,不多也不少.即使为调用列出了五个例外,也不要捕获它们的公共基类(如果它们有一个).但是,您并不总是需要在同一位置捕获来自同一调用的所有异常.
3)不要将细节异常传递到不带有意义信息的水平.相反,在低级别捕获异常,在适当的情况下记录它并返回状态代码或向上面的调用者抛出更通用的异常.
4)当您处于关键部分时,仅使用(并使用)全部处理程序.捕获异常,放弃资源(信号量或其他),重新抛出异常.
5)记录异常并不处理它.如果你在特定处理程序中所做的只是记录异常,你应该摆脱那个处理程序.
6)在循环中非常小心异常处理程序,尤其是没有延迟的循环或抛出异常时的出路.你很容易陷入忙碌的循环中.
小智 0
我知道有两个关于正确异常处理策略的好资源,但是它们更多地涉及 .NET 框架。
第一个是Krzysztof Cwalina(.NET 框架的首席设计师)的框架设计指南
http://blogs.msdn.com/b/kcwalina/archive/2005/03/16/396787.aspx
第二个是关于抛出异常时幕后发生的情况,它将提供一些很好的见解来帮助您决定如何处理异常。这本书名为《C# via CLR》,作者:Jeffrey Richter
http://shop.oreilly.com/product/9780735627048.do
希望这可以帮助。