最近我与一位开发人员进行了一次有趣的对话,他告诉我每次编写“尝试”时都必须提供“捕获”。他无法解释为什么会有这条规则。他告诉我,这是一个好的编程原则。为什么有这个规则?
供你参考,我不同意他的看法。我认为有时你可以编写一个只有“finally”块的“try”块。但我确实认为如果你写了一个“catch”,你必须在你的 catch 中做一些事情。永远不要只是重新抛出错误。
最近我与一位开发人员进行了一次有趣的对话,他告诉我每次编写“尝试”时都必须提供“捕获”。他无法解释为什么会有这条规则。他告诉我,这是一个好的编程原则。为什么有这个规则?
供你参考,我不同意他的看法。我认为有时你可以编写一个只有“finally”块的“try”块。但我确实认为如果你写了一个“catch”,你必须在你的 catch 中做一些事情。永远不要只是重新抛出错误。
您是对的:catch
如果您不知道如何处理异常并且只想确保finally
执行您的子句,则不需要编写子句。
添加一个catch
子句只是为了重新抛出异常是不好的做法。
顺便说一句,为了说明这实际上与两个不同的(当然不是外来的)问题有关,请注意,某些语言使用不同的构造来捕获异常并确保执行某些代码(通常是资源释放)catch
。finally
去使用defer
例如。
在大多数应用程序中try/finally
,构造的数量远远多于try/catch
构造。
因为拥有要清理的资源比接收您知道如何处理的异常要常见得多。
但是在 C# 中try/finally
几乎总是可以替换为 using
但这绝对不是“良好编程的原则”。
try
{
...
}
finally
{
...
}
使您有机会在 finally 块中执行代码,否则如果在 try 块中引发异常,这些代码将被错过。如果发生异常时有特定的事情要做,则只需要添加一个 catch 块。