问题标签 [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.
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++ 中没有任何定义。
java - 如何使用 Spring 邮件 API 捕获嵌套的 SMTPAddressFailedException
我正在尝试向用户提供的电子邮件 ID 发送电子邮件,但结果如下:
现在的问题是我可以捕获 MailSendException 并向客户端发送一条有意义的错误消息,说请提供有效的 emailId,但是 MailSendException 是一个非常通用的异常,捕获它并不能保证由于无效的电子邮件 ID 而发生异常。由于各种其他原因,可能会发生此异常。
我的问题是我想捕获 SMTPAddressFailedException 但不幸的是,在这种情况下它是一个嵌套异常,而 Spring 抛出的实际异常是一个非常通用的 MailSendException。请建议
java - 内部块的异常将被主要的 try-catch 捕获,但我需要提高它们
当此代码引发NotFoundException
main 块的异常时,将引发异常,但我想 raise NotFoundException
,我该如何管理它?
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 中情况不会改变吗?
azure - 如何通过防火墙在 Azure VM 中使用 JMeter 进行分布式测试
我正在尝试使用大多数文章中定义的常规方法在防火墙后面的 Azure VM 上使用 JMeter 进行分布式测试。我已经尝试了以下站点和其他一些网站中定义的所有可能选项。我试图为从机定义一个特定的端口,因为虚拟机在防火墙上,只有一些特定的端口是开放的。但没有任何效果。每次我收到以下错误。
连接拒绝主机:IP地址:嵌套异常是:java.net.ConnectException:连接超时:连接
c# - 嵌套异常作为 WCF 服务的返回类型
我有具有以下接口定义的 ac# WCF 服务:
如您所见,该方法应该返回 NULL(当方法执行成功时)或包含任意错误消息的异常。该方法已使用 ServiceKnownType-attributes 声明,以避免在向客户端返回异常实例时出错。这仅在返回的异常类型等于声明的 ServiceKnownTypes 之一并且 InnerException 为 NULL 时才有效。但是,如果我返回一个异常,例如,将 ArgumentException 作为 InnerException,我会收到错误消息,指出 ArgumentException 类型未知:
我现在有两个问题:
- 我怎样才能使它可以返回任何类型的异常,而不必将每个可能的类型声明为 ServiceKnownType 属性?
- 是否可以返回具有任意 InnerException 类型的嵌套异常?
c++ - std::throw_with_nested() 在内存不足的情况下调用 std::terminate()
我一直在通过随机进行malloc()
return来测试一个类,特别是在内存不足的情况下会发生什么nullptr
。它使用嵌套异常。
假设我有以下代码:
std::throw_with_nested()
最后打电话std::terminate()
:
这是根据标准的预期行为吗?就个人而言,感觉它应该只是覆盖旧的异常,或者std::bad_alloc
如果它未能分配嵌套异常则抛出。
c++ - 如何从 std::exception 到 std::nested_exception 的 dynamic_cast?
我刚刚看到一个包含 dynamic_cast from std::exception
to的代码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
没有共同基类的情况下成功吗?
c++ - EXCEPTION_RECORD 在什么情况下会链接到另一个嵌套异常?
的文档_EXCEPTION_RECORD
说它的一个成员,struct _EXCEPTION_RECORD *ExceptionRecord
指向关联的 EXCEPTION_RECORD 结构的指针。异常记录可以链接在一起,以便在发生嵌套异常时提供附加信息。
但是,我还没有能够引发嵌套结构化异常的这种情况。这是我到目前为止所尝试的:
pex->ExceptionRecord->ExceptionRecord
总是nullptr
。_ 在什么情况下我会得到一个嵌套_EXCEPTION_RECORD
在那里的链接?
c# - 从 catch 语句中抛出自定义异常是一种好习惯吗?
我有运行测试的命令行工具。有测试运行器类,它在测试执行之前做一些准备,然后运行测试并生成报告。如果我的类捕获异常并向上层抛出新的自定义异常,然后上层也将其抛出到上层(直到 View 类,它将显示/记录异常),是否可以?