问题标签 [rethrow]

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 投票
0 回答
68 浏览

c# - C#。重新抛出异常时的奇怪行为

在进行异常日志调查时,我在使用throw;重新抛出捕获的异常时遇到了异常调用堆栈的奇怪行为。

例如

在此示例中,我期望callstack1callstack2变量具有相同的值。但是保存的调用堆栈信息将我指向块throw;内的指令。catch如果我使用它可能是预期的行为throw ex1;,但我没有。

我使用相同的简单代码在两台远程计算机上检查此行为,但得到了不同的结果。第一个按预期工作(原始和重新抛出异常的调用堆栈相同)。第二显示完全不同的调用堆栈以重新引发异常,因此没有机会获得原始堆栈跟踪。

以前有人遇到过这个问题吗?

主要问题是重新抛出异常时如何保留原始调用堆栈?

先感谢您!

0 投票
0 回答
15 浏览

java - 为什么 javax.tools.ToolProvider.getSystemTool(...) 用最宽的 Error 类而不是 ServiceConfigurationError 重新抛出?

方法 javax.tools.ToolProvider.getSystemTool(Class clazz, String moduleName, String className) 具有以下主体(JDK 12):

我不明白为什么作者使用最广泛的错误类而不是类似throw new ToolProviderError(e)甚至根本不重新抛出的东西?任何具有广泛错误类的重新抛出都无助于在不深入研究异常链的情况下理解这里发生的事情。

0 投票
1 回答
265 浏览

c# - 尝试在包含另一个引发异常的方法的方法中捕获

我有一个 try-catch 块来处理一些方法的异常。此方法包含可能引发异常的其他方法,如下例所示:

我的问题是:

我可以简单地调用任何在内部抛出异常的方法,MyMethod因为我在第一个 try-catch 中处理了它们,或者我应该在那里放置一个 try-catch 块(或两个)并重新抛出MyException1/MyException2像这样

? 如果显示的方法是错误的,请解释为什么?

0 投票
1 回答
87 浏览

java - Java - 更精确的重新抛出功能

在 oracle 官方网站上写:( http://docs.oracle.com/javase/7/docs/technotes/guides/language/catch-multiple.html#rethrow

具体来说,在 Java SE 7 及更高版本中,当您在 catch 子句中声明一种或多种异常类型,并重新抛出由该 catch 块处理的异常时,编译器会验证重新抛出的异常的类型是否满足以下条件:

  • try 块能够抛出它。

  • 没有其他前面的 catch 块可以处理它。

  • 它是 catch 子句的异常参数之一的子类型或超类型。

请专注于第三点(它是 catch 子句的异常参数之一的子类型或超类型。)

它的真正含义是什么?你能给我看看这方面的例子吗?我不能清楚地理解它。

0 投票
0 回答
65 浏览

swift - init(_:uniquingKeysWith:) : 调用可以抛出,但是没有标记'try'并且错误没有被处理

我对重新投掷有疑问。以下代码在 Dictionary 扩展中:

这里uniquingKeysWith不会抛出错误,因为我正在指定序列,仍然编译器告诉“调用可以抛出,但它没有用'try'标记并且错误没有被处理”

谁能解释我为什么在参数不抛出时需要为 init 处理错误?根据重新抛出的概念,如果参数 uniquingKeysWith 不会抛出错误,则方法不需要处理错误。

0 投票
5 回答
301 浏览

java - 需要 Java 的“更精确地重新抛出异常”

我无法理解在 Java 7 及更高版本中精确重新抛出的工作原理。正如https://www.theserverside.com/tutorial/OCPJP-Use-more-precise-rethrow-in-exceptions-Objective-Java-7中所指出的 ,在 Java 7 及更高版本中,我们可以throws在方法声明,以逗号分隔的方法可能抛出的特定异常列表。如果所有这些异常都是一般异常的子类型java.lang.Exception,我们将能够在捕获此超类型的 catch 块中捕获它们中的任何一个,同时让客户端代码(例如调用者方法)知道实际发生了哪些可能的子类型异常.

最初,我认为为了让客户端代码知道实际发生了哪个异常,我们需要在throws子句中指定特定异常的列表。然而,在下面的示例中,客户端代码(main()方法)似乎能够检索该信息,即使我们仅在被调用方法java.lang.Exceptionthrows子句中指定异常。因此,我的问题是:

为什么不管throws方法的子句runException()throws ExceptionA, ExceptionBor ,下面的代码输出都一样throws Exception

我在 Eclipse 中使用 Oracle JVM-12。提前致谢!

输出:

0 投票
0 回答
47 浏览

c# - 将捕获的 C# 异常作为参数传递

如果我执行以下操作,Jon Skeet 会将我喂给他的宠物独角兽吗?

主要动机是通用异常处理逻辑。这个处理逻辑很重要,我宁愿不需要复制它。是否有可能以某种方式将其重构TakeTheRiskTakeYetAnotherRiskAsnyc上述ProcessAndRethrowException内容?

0 投票
1 回答
179 浏览

c++ - std::rethrow_exception(nullptr) 未定义行为或 bad_exception?

我有一个代码片段,我用 nullptr 作为参数调用 rethrow_exception。文档说参数应该是非空的,但我想知道,如果我通过 nullptr,行为是未定义的还是已知的?

我每次都遇到 bad_exception 。但是,此链接表示行为未定义。

任何人,谁能评论到底发生了什么?

0 投票
0 回答
131 浏览

java - 当 catch 子句有另一个不抛出任何东西的 try-catch 时重新抛出原始异常 - 在 Reactive 管道中等效

我有一种方法,在传统的命令式try-catch编码风格中是这样的:

要求是:

  • 工作时cartService.confirm(),不返回任何内容
  • 失败时进入catch部分,尝试paymentService.cancel()
  • 如果 2 失败,则抛出ex2
  • 如果 2 成功,则抛出ex1(因为confirm()无论如何都失败了)
  • 根据这里抛出的异常,控制器会做不同的事情

现在,在 Reactive 风格中,它就像:

但是,我花了很多时间与 Reactive 运算符一起玩,但找不到任何方法来重新抛出原始异常。上面的代码可以编译,但是失败时不会抛出第一个异常confirmCart()我猜是因为onErrorMap()onErrorResume()不能共存;后一个会很荣幸,也许吧?

我已经尝试过,onErrorMap因为此外,它应该是同步的:如果失败则confirmCart()应该等待。paymentService.cancel()

我在玩then()thenReturn()等等,但我可以让它编译,但它不会返回/重新抛出第一个确认异常。

在测试中,失败时我没有抛出异常cartService.confirm()

0 投票
2 回答
196 浏览

java - 在java中将检查的异常抛出为未检查而不是包装

我有以下代码,我需要扫描抛出的异常。如果它满足特定条件,我将忽略该异常。否则我重新扔。抛出的异常是一个检查异常,这意味着重新抛出是困难的部分。包括我必须抓住它,并且操作发生在一个被覆盖的方法中,该方法的基类方法没有使用throws clause. 卡在重新编程整个庞大的库或将异常包装为RuntimeException(这不是一个选项,因为我们将包装的检查异常,在其传播过程中的某个地方(派生类)预期会被一个 catch 子句 - 它的某种信号),我希望就这样的实现得到一些建议。或者也许只是实施。