知识卡片
异常必须可见
内容
无法处理的异常应带着上下文向上传播,不能吞掉或替换成无意义结果。异常处理权属于设计的一部分。发散:沉默失败最可怕,因为它把可诊断的问题变成了随机行为。
参考来源
- 位置:第7章《敏捷调试》"36 报告所有的异常"(源文件:_epub-src/OEBPS/text00000.html)
- 结论依据:原文用开源程序库上层方法用空catch块吞掉底层异常、只返回null导致调用者摸不着头绪的案例,以及大型航空订票系统因一台服务器上未检查异常导致系统崩溃的新闻,明确"处理或是向上传播所有的异常,不要将它们压制不管,就算是临时这样做也不行",直接支持卡片结论。
- 原始内容:"上层方法却偷偷地用没有异常处理代码的空catch代码块,把异常给忽略掉了,然后就抛出一个null。……必须要处理所有的异常,倘若可以,从失败中恢复再好不过。如果不能处理,就要把异常传播到方法的调用者……原因是什么?在一台应用服务器上发生了一个未检查异常。……处理或是向上传播所有的异常。不要将它们压制不管,就算是临时这样做也不行。"