问题标签 [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 投票
1 回答
886 浏览

java - 在java中重新抛出不同的捕获异常

我有以下下载功能。我在途中捕获了一些可能的异常,并将它们存储在 Exception 类型变量中,在 finally 块中清理后,我想重新抛出原始异常(如果有一个被捕获)或抛出我自己的自定义 DownloadFailedException . 问题是 Eclipse 给了我“未处理的异常类型异常”错误,因为我的函数没有声明抛出异常。有没有“好”的方法来做到这一点?

解决方案:

0 投票
2 回答
475 浏览

c# - 在 try 块 c# 中重新引发异常

我在这里的第一个问题,我的英语不太好,所以请多多包涵,

我正在编写一个应用程序,允许用户编写与“驱动程序”接口的脚本,脚本和驱动程序都是独立的类库 dll。这些类通过传递的回调委托进行通信,因此在编译时它们没有链接。

示例:(脚本)-->(处理通信的程序)-->(驱动程序)

现在我的问题是:

当脚本通过委托执行方法并抛出异常时,异常会冒泡回脚本,如果用户在 try-catch 块中捕获它,则用户可以处理它,如果没有,则必须捕获异常在我的程序里面。

它像这样工作正常,但我不知道这是否是正确的方法:

0 投票
1 回答
375 浏览

c# - 修改字典后抛出异常

以下是我在 C# 中的代码:

问题:执行上述操作,我是否会丢失要添加到数据字典中的条目?--> 在我看来,我正在重新抛出 catch 语句中捕获的异常,并且它还没有从下一行添加的 Dictionary 记录。

上面的代码应该是:

  • 但在这种情况下,我不想重置堆栈跟踪。

在网上和 SO 上搜索了这个,但没有运气。

蒂亚!

0 投票
4 回答
3039 浏览

c# - 尝试捕获并重新抛出异常

前几天我在我们的一个项目中看到了一些代码,它使用 try catch 并重新抛出捕获的异常,如下所示:

catch 块中的异常没有做任何其他事情,所以我什至不确定它为什么会被重新抛出。我看不出实际上再次抛出相同的异常并且对异常什么都不做有任何好处。

如果重新抛出在 catch 块中捕获的异常,C# 如何处理这个问题?它会陷入无限的抛出/捕获循环吗?或者它最终会离开 try catch 吗?

0 投票
2 回答
710 浏览

c++ - 创建 2D 数组的异常:在 C++ 中重新抛出之前进行清理

我想要一个动态创建并返回二维数组的函数,或者当内存分配失败时通过异常而不会在清理已分配的行丢失信息:

所以我可以肯定,如果创建抛出,没有内存泄漏。但是我可以确定,传递的异常 e 与 new 直接抛出而不被捕获是“相同的”吗?

例如

还是必须要catch (bad_alloc &e)create函数里面?或者它只适用于catch (...) { /* do clean-up*/ throw; }?是否存在与 C# 中相同的问题,即当重新抛出throw;不简单时丢失堆栈跟踪?

还有一个更普遍的问题:

0 投票
1 回答
137 浏览

error-handling - 从 SSIS 包中重新引发错误

我有一个 2010 SSIS 包,它又运行其他包。每个包都是独立的,所以如果一个包失败,其他包仍然可以进步。我的逻辑表明下一个运行在前一个完成时运行,无论它是否失败

我的问题是,当一个人出错时,我会收到一条非常标准的错误消息,它不会告诉我哪个崩溃或给我任何其他线索。

集成服务仪表板确实有帮助,但仍缺乏基本信息。但我想要的是包重新抛出错误,所以我可以添加更多的 ifnormation 到它。

这是怎么做到的?

我是否在 Onerror 事件中为单个包创建脚本任务并在重新抛出错误之前添加我自己的一些信息?

有什么例子可以告诉你需要做什么?我仍然希望其他数据包继续执行。

0 投票
2 回答
10326 浏览

java - 用新消息重新抛出 java 异常,如果它在方法声明列表中,则保留异常类型

我正在尝试创建一个辅助方法,该方法将消除对这样的代码的需要:

问题是我需要同时在函数声明和函数体中维护 throws 列表。我正在寻找如何避免这种情况并充分更改 throws 列表,并且我的代码看起来像:

哪里 rethrow 方法足够聪明,可以从方法声明中识别 throws 列表。

这样,当我更改我的方法在 throws 列表中传播的类型列表时,我不需要更改正文。

以下是可以解决问题的功能。问题是因为它不知道它会抛出什么类型的异常,它的 throws 声明必须说 Exception,但如果它这样做了,那么将要使用它的方法也需要指定它,整个想法使用 throws 列表会下地狱。

有什么建议可以解决吗?


更新 1:我可以RuntimeException用来避免需要 throws 声明,但在这种情况下,我失去了异常的类型,这是最重要的一点之一。

想法我如何解决这个问题?

0 投票
2 回答
52731 浏览

python - 重新抛出 python 异常。抓哪个?

我正在学习使用python。我刚刚看到这篇文章: http: //nedbatchelder.com/blog/200711/rethrowing_exceptions_in_python.html 它描述了在python中重新抛出异常,如下所示:

由于您重新抛出异常,因此应该有一个“外部 catch-except”语句。但是现在,我在想,如果do_something_to_apologize()里面的 except 抛出错误怎么办。哪一个将被捕获在外部“catch-except”中?你重新扔的那个还是被扔的那个do_something_to_apologize()?还是先捕获优先级最高的异常?

0 投票
2 回答
342 浏览

java - 重新抛出在前面的 catch 块中处理的异常

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

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

-try 块能够抛出它。

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

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

请专注于第二点(There are no other preceding catch blocks that can handle it。)

研究以下代码:

这段代码编译得很好。根据我在阅读上述文章的引用后的看法,我希望看到编译器会验证它,我会得到编译器错误。

我是否理解错了第二点?

0 投票
3 回答
3937 浏览

java - 立即重新抛出 catch 块并最终使用

我有一个负责记录操作的包装器,名为 OperationWrapper。其结构简单,如下:

由于“o”操作可能会引发异常,因此logOperationFinished()不会始终调用该方法,因此日志记录无法正确运行。

此外,调用该runOperation()方法的各种组件都会处理这些异常。

为了确保它logOperationFinished()始终运行,我实现了以下结构:

现在logOperationFinished()总是运行,但我收到来自 IntelliJ 的警告:

立即重新抛出捕获的异常
报告立即重新抛出捕获的异常的任何捕获块,而不对其执行任何操作。这样 的catch块是不必要的或缺少错误处理。

在我看来,IntelliJ 在发出此警告时似乎没有考虑 finally 块。

我做错了什么还是有更好的方法来实现这一点?

谢谢。