问题标签 [try-catch-finally]

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 投票
4 回答
12315 浏览

java - 最后返回“发生在”吗?

我试图说服自己finally子句中采取的行动发生在函数返回之前(在内存一致性意义上)。从JVM 规范中可以清楚地看出,在线程中,程序顺序应该驱动发生在关系之前 - 如果a在程序顺序中发生b ,则a 发生在 b之前。

但是,我没有看到任何明确说明最终在返回之前发生的事情,是吗?或者,编译器是否可以通过某种方式重新排序finally子句,因为它只是记录日志。

激励示例:我有一个线程从数据库中获取对象并将它们放入 ArrayBlockingQueue,而另一个线程正在将它们取出。我有一些用于事件计时tryfinally块,并且我在日志语句之前看到了返回的影响

线程 1:

线程 2:

令我惊讶的是,它以意想不到的顺序打印出来。虽然,是的,不同线程中的日志记录语句可能会出现乱序,但至少有 20 毫秒的时间差。

请注意,这与finally trump return的问题并不完全相同。我不是在问将返回什么,而是在问内存一致性和执行顺序。

0 投票
3 回答
19501 浏览

.net - 在 finally 块中返回...为什么不呢?

正如 MSDN提到的

finally 块中的代码在遇到 Try 或 Catch 块中的 Return 语句之后运行,但在该 Return 语句执行之前。在这种情况下,Finally 块中的 Return 语句在初始 Return 语句之前执行。这给出了不同的返回值。为了防止这种潜在的混乱情况,请避免在 finally 块中使用 Return 语句。

由于我对这篇笔记的了解不多,所以我举个例子(VB.NET,我认为在C#中情况类似):

现在,为什么这在 C# 和 VB.NET 中都是非法的?

0 投票
5 回答
128 浏览

language-agnostic - 在具有 try-catch-finally 的语言中,是否有可能以某种方式为所有异常处理程序执行操作?

是否有任何语言支持类似以下构造的内容,或者是否有一种使用无处不在的 try-catch-finally 来实现此目的的好方法?

我知道这取决于特定的语言,但是 Java、C#、C++、PHP 等是否有这样的支持?

0 投票
5 回答
685 浏览

java - 这个 `try..catch..finally` 是多余的吗?

这与我们省略 catch 子句的行为有什么不同吗?


[编辑]为了消除混乱,是的,catch除了重新抛出异常之外,该块什么都不做。我想知道这是否会在调用块时导致某种不同的排序finally(假设抛出的异常被调用者捕获),但从我迄今为止从答案中推断出来的,它没有。

0 投票
2 回答
139 浏览

error-handling - 如果在 finally 块之后发生错误,是否有办法处理 try-catch-finally 中的错误?

我只是好奇而已。我刚刚使用 try-catch-finally 用 C# 编写了我的第一个主要代码。我想知道是否存在这样的方法来处理错误,如果在 finally 块内还有其他要处理的东西。谢谢。

0 投票
2 回答
132 浏览

c# - 帮助 finally 块中的异常处理

我正在尝试使用 try-catch-finally 块来捕获异常。我在 catch 块中捕获了异常,并使用全局异常变量将其传递给 finally 块。这样做,我已经处理了 finally 块中的异常情况。我知道这听起来很奇怪,但有必要这样做。请让我知道是否有任何相同的编码标准问题。另外,如果您可以提出相同的建议,我将非常感激。

谢谢。

0 投票
5 回答
1354 浏览

c# - ThreadAbortException 是否仍然强制执行 finally (try/catch) 部分中的代码?

我有一个System.Timers.Timer计时器,它AutoReset设置为false. 我使用 atry/finally来确保Start它结束时的callback计时器(我以这种方式使用计时器来防止callback执行重叠)。代码:

我的问题是,如果执行线程是,会发生什么Aborted?该finally部分是否仍在执行或没有线程来运行该部分?

0 投票
4 回答
3115 浏览

python - 如何在python中捕获finally异常子句的消息?

我知道如何捕获异常并打印它们返回的消息:

到目前为止,这工作得很好。

但是如何在“finally”子句中捕获并打印消息?

从我理解的几个答案中,这是不可能的。可以做这样的事情吗?

0 投票
6 回答
130155 浏览

java - 如何在不引发 Java 异常的情况下从 try/catch 块中中断

我需要一种从 try/catch 块的中间中断而不抛出异常的方法。类似于 for 循环中的 break 和 continue 的东西。这可能吗?

关于抛出一个自定义异常(将其命名为“BreakContinueException”),我一直很奇怪,该异常在其 catch 处理程序中没有任何作用。我敢肯定这是非常扭曲的。

那么,任何我不知道的直接解决方案?

0 投票
5 回答
4820 浏览

c# - 使用 Try-Catch-Finally 处理算术异常

我想尝试两种不同的事情(两者都有很大的失败可能性),因此我想使用“finally”语句来运行“安全”,以防前两次尝试失败。

以下面的例子为例(不,这不是我在项目中使用的代码!)。

因此,我希望我的程序执行以下操作:

  1. 尝试除以零
  2. 如果步骤 #1失败,我希望 'catch' 语句运行其代码(在此示例中应该再次失败)。
  3. 如果步骤 #1 和 #2 都失败了,我希望我的程序在“finally”语句中显示 MessageBox。

我什至接近这个?