gpt4 book ai didi

exception - try catch/except finally 语句中的finally有什么意义

转载 作者:行者123 更新时间:2023-12-03 05:32:39 24 4
gpt4 key购买 nike

多年来,我在许多语言中使用了 try-catch/except-finally 变体,今天有人问我 finally 的意义是什么,我无法回答。

基本上,为什么要在finally中放入一条语句,而不是仅仅将其放在整个try-catch block 之后?或者换句话说,以下代码块之间是否存在差异:

try{ //a}
catch {//b}
finally {//c}


try{//a}
catch{//b}
//c

编辑:
人们,我知道finally的作用,我已经使用它很多年了,但我的问题是在上面的示例中将//c放在finally中似乎是多余的,不是吗?

最佳答案

finally block 的目的是确保代码在三种情况下运行,而单独使用“catch” block 无法清楚地处理这些情况:

  1. 如果try block 中的代码通过fallthrough或return退出
  2. 如果catch block 中的代码重新抛出捕获的异常,或者(无意或有意)最终抛出一个新异常。
  3. 如果 try block 中的代码遇到 try 没有 catch 的异常。

可以在每次 return 或 throw 之前复制 finally 代码,并将 catch block 包装在自己的 try/catch 中,以允许发生意外异常的可能性,但放弃所有这些并简单地使用 finally block 要容易得多。

顺便说一句,我希望语言设计者能够在 finally block 中包含一个 exception 参数,以处理在执行完之后需要清理的情况。异常,但仍然希望它渗透到调用堆栈中(例如,可以将构造函数的代码包装在这样的构造中,如果构造函数要因异常退出,则Dispose正在构造的对象) .

关于exception - try catch/except finally 语句中的finally有什么意义,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9687849/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com