把所有东西都包在try/catch块中,是否构成防御性编程?

38

我已经编程三年了。当我编写程序时,我习惯处理所有已知的异常并以友好的方式向用户发出警告。最近我看到了一些代码,几乎所有的方法都被包含在try/catch块中。作者说这是防御性编程的一部分。我想知道,这真的是防御性编程吗?你推荐将所有代码放在try块中吗?


6
不太确定。虽然标题很笼统,但问题实际上非常具体,涉及使用异常作为编程防御性方法,以及这样做的问题所在。 - Elie
12个回答

3
在C++中,编写大量的try/catch块的一个原因是获取异常抛出的堆栈跟踪。你需要在每个地方都写上try/catch,假设你不在正确的位置处理异常,那么就捕获一些跟踪信息并重新抛出异常。通过这种方式,如果异常一直冒泡并导致程序终止,您将获得完整的堆栈跟踪,以确定问题的起始位置(如果不这样做,则未处理的C++异常会帮助解开堆栈并消除任何可能找到异常来源的可能性)。
我想,在任何具有更好异常处理的语言中(即未捕获的异常告诉您它们来自哪里),您只需要在能够处理异常时才捕获它们。否则,您只会让程序难以阅读。

2
我发现"try" "catch"块非常有用,特别是在使用实时内容(如访问数据库)时。
太多了吗?这取决于观察者的眼光。
我发现,将日志复制到Word中,并使用“查找”进行搜索 - 如果日志阅读器没有“查找”或“搜索”作为其包含的工具的一部分 - 是浏览冗长日志的简单而出色的方法。
它确实在普通意义上看起来很“防御性”。
通过经验,我发现要遵循您的经理、团队领导或同事所做的任何事情。如果您只是为自己编程,请使用它们,直到代码变得“稳定”或处于调试构建中,然后在完成后删除它们。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接