在写“尝试”时,我们为什么要总是写一个“捕获”?

When writing a “try” why should we always write a “catch”?

最近,我和一位开发人员同事进行了一次有趣的交谈,他告诉我,每次写"尝试"时,都必须提供"捕获"。他无法解释这条规则的原因。他告诉我这是一个好编程的原则。为什么会这样呢?

据你所知,我不同意他的说法。我认为有时候你可以用一个"finally"块来写一个"try"块。但我认为,如果你写了一个"catch",你就必须在catch中做些什么。千万不要只重复错误。


你说得对:如果你不知道如何处理例外情况,只想确保你的finally条款得到执行,你就不需要写一个catch条款。

添加catch条款只是为了重新引发异常,这是不好的做法。

顺便说一下,为了说明catchfinally实际上与两个不同的(公认不是外来的)问题有关,请注意,有些语言使用不同的构造来捕获异常,并确保执行某些代码(通常是资源释放)。例如,使用defer


在大多数应用中,try/finally构造的数量远远超过try/catch构造的数量。

因为拥有要清理的资源比接收您知道如何处理的异常更常见。

然而,try/finally几乎总是可以被using在C中所取代,因此在C中,您的开发人员在这种情况下可能有一个观点;但最明显的是,它不是"良好编程的原则"。


1
2
3
4
5
6
7
8
try
{
    ...
}
finally
{
    ...
}

为您提供在finally块中执行代码的机会,否则,如果在try块中引发异常,代码将丢失。只有在发生异常时有特定的事情要做时,才需要添加catch块。