你能捕获异常处理期间抛出的异常吗?

时间:2014-08-14 05:26:49

标签: exception-handling d

我正在阅读 D编程语言,它说throw看看是否存在现有的异常链(正在处理异常),如果存在,则附加新的例外。

但是如果第二个异常可以在它逃脱第一个异常处理程序之前处理呢?例如,如果捕获第一个函数的catch调用另一个函数,这会导致异常,但可以处理它。好像捕手必须知道它所调用的任何代码可以在内部调用哪些异常。

1 个答案:

答案 0 :(得分:3)

仅当第二个抛出的异常转义catch块时才会发生异常链接。如果它在catch块内处理,无论是在块中还是在被调用者中,都不会发生任何异常情况 - 第一个异常会正常处理。

您可以通过一个简单的示例自行检查:

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)
            {}
    }
}

此程序将正常退出,因为两个异常都是以静默方式处理的。