我正在阅读The D 编程语言,它说 throw
会查看是否存在现有的异常链(正在处理的异常),以及是否存在是,附加新的异常(exception)。
但是如果第二个异常可以在它转义第一个异常的处理程序之前得到处理呢?例如,如果捕获第一个的 catch
调用另一个函数,这会导致异常但可以处理它。看起来捕手必须知道它调用的任何代码可以在内部调用哪些异常。
最佳答案
仅当第二个抛出的异常逃脱 catch
block 时,才会发生异常链接。如果它是在 catch block 中处理的,无论是在 block 中还是在被调用者中,都不会发生任何异常情况 - 第一个异常会正常处理。
您可以通过一个简单的示例自行检查:
class E : Exception { this() { super("E"); } }
class F : Exception { this() { super("F"); } }
void main()
{
try
throw new E;
catch (E e)
{
try
throw new F;
catch (F f)
{}
}
}
该程序将正常退出,因为两个异常都会以静默方式处理。
关于exception - 你能捕获异常处理过程中抛出的异常吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25300655/