异常后执行在哪里恢复?

the*_*tor 4 c++ python exception

一般情况下,抛出并捕获异常后程序执行在哪里恢复?它会在抛出异常的代码行之后恢复,还是在它被捕获的地方继续?此外,这种行为在大多数编程语言中是否一致?

Mos*_*evi 7

执行catch块内的代码,并在catch块之后继续执行原始执行.


Adr*_*son 4

执行从捕获异常的位置恢复,即在catch专门处理当前异常类型的块的开头。执行 catch 块,忽略其他 catch 块(将多个catch块视为 switch 语句)。在某些语言中,finally块也可能在catch. 然后程序继续执行整个 后的下一条指令try ... catch ... finally ...

您应该注意,如果未在块中捕获异常,则异常将传播到当前函数的调用者,并在调用堆栈中向上传播,直到处理catch异常。在这种情况下,您可以将函数调用视为宏:在调用每个函数的位置插入每个函数的代码,您将清楚地看到每个try .. catch ... finally ...块的嵌套。

如果没有异常处理程序,程序通常会崩溃。(某些语言在这一点上可能有所不同)。

执行流程的行为在我所知道的每种语言中都是一致的。唯一的区别在于try ... catch ... finally ...构造:finally并不存在于每种语言中,某些语言不允许 afinally和 acatch在同一个块中(您必须嵌套两个try才能使用 2),某些语言允许捕获所有内容(catch (...)C++ 中的the )而有些语言则不然。

  • 问题是在抛出异常并捕获异常后,程序执行在哪里恢复。显然,catch 块被执行了。@theactiveactor 正在寻找的答案是,*执行在 catch 块后面的行继续,除非从 catch 块重新抛出异常或从 catch 块内抛出新的异常。* (2认同)