问题标签 [nested-exceptions]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
680 浏览

c++ - 使用 RAII 嵌套异常

所以在 C++ 中嵌套异常的方法std::nested_exception是:

但是这种技术在希望嵌套异常的每个级别都使用显式的 try/catch 块,这至少可以说是丑陋的。

RAII,Jon Kalb 将其扩展为“责任获取就是初始化”,是一种处理异常的更简洁的方法,而不是使用显式的 try/catch 块。使用 RAII,显式 try/catch 块在很大程度上仅用于最终处理异常,例如为了向用户显示错误消息。

查看上面的代码,在我看来,进入foo()可以被视为需要报告任何异常std::runtime_error("foo failed")并将详细信息嵌套在嵌套异常中的责任。如果我们可以使用 RAII 来承担这个责任,那么代码看起来会更干净:

有没有办法在这里使用 RAII 语法来替换显式的 try/catch 块?


为此,我们需要一种类型,当调用其析构函数时,检查析构函数调用是否是由于异常,如果是则嵌套该异常,并抛出新的嵌套异常,以便正常展开。这可能看起来像:

但是std::throw_with_nested(),需要“当前处理的异常”处于活动状态,这意味着它除了在 catch 块的上下文中之外不起作用。所以我们需要类似的东西:

不幸的是,据我所知,rethrow_uncaught_excpetion()在 C++ 中没有任何定义。

0 投票
2 回答
2413 浏览

java - 如何使用 Spring 邮件 API 捕获嵌套的 SMTPAddressFailedException

我正在尝试向用户提供的电子邮件 ID 发送电子邮件,但结果如下:

现在的问题是我可以捕获 MailSendException 并向客户端发送一条有意义的错误消息,说请提供有效的 emailId,但是 MailSendException 是一个非常通用的异常,捕获它并不能保证由于无效的电子邮件 ID 而发生异常。由于各种其他原因,可能会发生此异常。

我的问题是我想捕获 SMTPAddressFailedException 但不幸的是,在这种情况下它是一个嵌套异常,而 Spring 抛出的实际异常是一个非常通用的 MailSendException。请建议

0 投票
2 回答
41 浏览

java - 内部块的异常将被主要的 try-catch 捕获,但我需要提高它们

当此代码引发NotFoundExceptionmain 块的异常时,将引发异常,但我想 raise NotFoundException,我该如何管理它?

0 投票
5 回答
11516 浏览

c++ - 为什么 C++ 不使用 std::nested_exception 来允许从析构函数中抛出?

从析构函数抛出异常的主要问题是,在调用析构函数的那一刻,另一个异常可能是“在飞行中”(std::uncaught_exception() == true),因此在这种情况下该怎么做并不明显。用新异常“覆盖”旧异常将是处理这种情况的可能方法之一。但是决定在这种情况下必须调用std::terminate(或另一个)。std::terminate_handler

C++11 通过std::nested_exception类引入了嵌套异常特性。此功能可用于解决上述问题。旧的(未捕获的)异常可以嵌套到新的异常中(反之亦然?),然后可以抛出嵌套的异常。但是这个想法没有被使用。std::terminate在 C++11 和 C++14 中仍然会在这种情况下调用。

所以问题。是否考虑了嵌套异常的想法?有什么问题吗?在 C++17 中情况不会改变吗?

0 投票
0 回答
762 浏览

azure - 如何通过防火墙在 Azure VM 中使用 JMeter 进行分布式测试

我正在尝试使用大多数文章中定义的常规方法在防火墙后面的 Azure VM 上使用 JMeter 进行分布式测试。我已经尝试了以下站点和其他一些网站中定义的所有可能选项。我试图为从机定义一个特定的端口,因为虚拟机在防火墙上,只有一些特定的端口是开放的。但没有任何效果。每次我收到以下错误。

连接拒绝主机:IP地址:嵌套异常是:java.net.ConnectException:连接超时:连接

0 投票
1 回答
210 浏览

c# - 嵌套异常作为 WCF 服务的返回类型

我有具有以下接口定义的 ac# WCF 服务:

如您所见,该方法应该返回 NULL(当方法执行成功时)或包含任意错误消息的异常。该方法已使用 ServiceKnownType-attributes 声明,以避免在向客户端返回异常实例时出错。这仅在返回的异常类型等于声明的 ServiceKnownTypes 之一并且 InnerException 为 NULL 时才有效。但是,如果我返回一个异常,例如,将 ArgumentException 作为 InnerException,我会收到错误消息,指出 ArgumentException 类型未知:

我现在有两个问题:

  1. 我怎样才能使它可以返回任何类型的异常,而不必将每个可能的类型声明为 ServiceKnownType 属性?
  2. 是否可以返回具有任意 InnerException 类型的嵌套异常?
0 投票
1 回答
170 浏览

c++ - std::throw_with_nested() 在内存不足的情况下调用 std::terminate()

我一直在通过随机进行malloc()return来测试一个类,特别是在内存不足的情况下会发生什么nullptr。它使用嵌套异常。

假设我有以下代码:

std::throw_with_nested()最后打电话std::terminate()

这是根据标准的预期行为吗?就个人而言,感觉它应该只是覆盖旧的异常,或者std::bad_alloc如果它未能分配嵌套异常则抛出。

0 投票
2 回答
637 浏览

c++ - 如何从 std::exception 到 std::nested_exception 的 dynamic_cast?

我刚刚看到一个包含 dynamic_cast from std::exceptionto的代码std::nested_exception,例如,

一开始,我认为这段代码不会被编译,因为std::nested_exception不是派生std::exception,我希望dynamic_cast对继承进行静态检查,但我错了。

虽然我找不到明确提到dynamic_cast允许这样做的相关标准规范,但我确认所有三个主要编译器(clang/gcc/msvc)都允许dynamic_cast在完全不相关的类型之间。

但是,std::nested_exception不是从 派生的std::exception,所以我认为dynamic_cast会抛出bad_alloc异常并且"ok"从不打印。我又错了。

现在,我想知道这是如何工作的。std::exception这对于and来说是不是很特别std::nested_exception?或者,我可以在对象dynamic_cast<A&>(b)类型A和类型b没有共同基类的情况下成功吗?

0 投票
1 回答
69 浏览

c++ - EXCEPTION_RECORD 在什么情况下会链接到另一个嵌套异常?

文档_EXCEPTION_RECORD说它的一个成员,struct _EXCEPTION_RECORD *ExceptionRecord

指向关联的 EXCEPTION_RECORD 结构的指针。异常记录可以链接在一起,以便在发生嵌套异常时提供附加信息。

但是,我还没有能够引发嵌套结构化异常的这种情况。这是我到目前为止所尝试的:

pex->ExceptionRecord->ExceptionRecord总是nullptr。_ 在什么情况下我会得到一个嵌套_EXCEPTION_RECORD在那里的链接?

0 投票
1 回答
1411 浏览

c# - 从 catch 语句中抛出自定义异常是一种好习惯吗?

我有运行测试的命令行工具。有测试运行器类,它在测试执行之前做一些准备,然后运行测试并生成报告。如果我的类捕获异常并向上层抛出新的自定义异常,然后上层也将其抛出到上层(直到 View 类,它将显示/记录异常),是否可以?