exception - 你能捕获异常处理过程中抛出的异常吗?

标签 exception d

我正在阅读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/

相关文章:

c++ - 不在 C++ 中的 D 运算符

java - 如何测试任何方法调用是否抛出异常?

c# - Visual Studio 中缺少异常列表

java - 我如何从 Hibernate Exception 中提取 constraintName

d - D 语言是否完全依赖于 D 运行时?

sockets - 在 D 中使用结构体作为缓冲区

d - 如何将 D 数组转换为 C 变量?

php - 路由未使用 laravel route::controller 定义异常

ruby - 拯救线程内部引发的同时错误

arrays - 在 D 中使用带有数组的构造函数