问题标签 [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.
java - 最后返回“发生在”吗?
我试图说服自己finally
子句中采取的行动发生在函数返回之前(在内存一致性意义上)。从JVM 规范中可以清楚地看出,在线程中,程序顺序应该驱动发生在关系之前 - 如果a在程序顺序中发生b ,则a 发生在 b之前。
但是,我没有看到任何明确说明最终在返回之前发生的事情,是吗?或者,编译器是否可以通过某种方式重新排序finally
子句,因为它只是记录日志。
激励示例:我有一个线程从数据库中获取对象并将它们放入 ArrayBlockingQueue,而另一个线程正在将它们取出。我有一些用于事件计时try
的finally
块,并且我在日志语句之前看到了返回的影响
线程 1:
线程 2:
令我惊讶的是,它以意想不到的顺序打印出来。虽然,是的,不同线程中的日志记录语句可能会出现乱序,但至少有 20 毫秒的时间差。
请注意,这与finally trump return的问题并不完全相同。我不是在问将返回什么,而是在问内存一致性和执行顺序。
.net - 在 finally 块中返回...为什么不呢?
正如 MSDN提到的:
finally 块中的代码在遇到 Try 或 Catch 块中的 Return 语句之后运行,但在该 Return 语句执行之前。在这种情况下,Finally 块中的 Return 语句在初始 Return 语句之前执行。这给出了不同的返回值。为了防止这种潜在的混乱情况,请避免在 finally 块中使用 Return 语句。
由于我对这篇笔记的了解不多,所以我举个例子(VB.NET,我认为在C#中情况类似):
现在,为什么这在 C# 和 VB.NET 中都是非法的?
language-agnostic - 在具有 try-catch-finally 的语言中,是否有可能以某种方式为所有异常处理程序执行操作?
是否有任何语言支持类似以下构造的内容,或者是否有一种使用无处不在的 try-catch-finally 来实现此目的的好方法?
我知道这取决于特定的语言,但是 Java、C#、C++、PHP 等是否有这样的支持?
java - 这个 `try..catch..finally` 是多余的吗?
这与我们省略 catch 子句的行为有什么不同吗?
[编辑]为了消除混乱,是的,catch
除了重新抛出异常之外,该块什么都不做。我想知道这是否会在调用块时导致某种不同的排序finally
(假设抛出的异常被调用者捕获),但从我迄今为止从答案中推断出来的,它没有。
error-handling - 如果在 finally 块之后发生错误,是否有办法处理 try-catch-finally 中的错误?
我只是好奇而已。我刚刚使用 try-catch-finally 用 C# 编写了我的第一个主要代码。我想知道是否存在这样的方法来处理错误,如果在 finally 块内还有其他要处理的东西。谢谢。
c# - 帮助 finally 块中的异常处理
我正在尝试使用 try-catch-finally 块来捕获异常。我在 catch 块中捕获了异常,并使用全局异常变量将其传递给 finally 块。这样做,我已经处理了 finally 块中的异常情况。我知道这听起来很奇怪,但有必要这样做。请让我知道是否有任何相同的编码标准问题。另外,如果您可以提出相同的建议,我将非常感激。
谢谢。
c# - ThreadAbortException 是否仍然强制执行 finally (try/catch) 部分中的代码?
我有一个System.Timers.Timer
计时器,它AutoReset
设置为false
. 我使用 atry/finally
来确保Start
它结束时的callback
计时器(我以这种方式使用计时器来防止callback
执行重叠)。代码:
我的问题是,如果执行线程是,会发生什么Aborted
?该finally
部分是否仍在执行或没有线程来运行该部分?
python - 如何在python中捕获finally异常子句的消息?
我知道如何捕获异常并打印它们返回的消息:
到目前为止,这工作得很好。
但是如何在“finally”子句中捕获并打印消息?
从我理解的几个答案中,这是不可能的。可以做这样的事情吗?
java - 如何在不引发 Java 异常的情况下从 try/catch 块中中断
我需要一种从 try/catch 块的中间中断而不抛出异常的方法。类似于 for 循环中的 break 和 continue 的东西。这可能吗?
关于抛出一个自定义异常(将其命名为“BreakContinueException”),我一直很奇怪,该异常在其 catch 处理程序中没有任何作用。我敢肯定这是非常扭曲的。
那么,任何我不知道的直接解决方案?
c# - 使用 Try-Catch-Finally 处理算术异常
我想尝试两种不同的事情(两者都有很大的失败可能性),因此我想使用“finally”语句来运行“安全”,以防前两次尝试都失败。
以下面的例子为例(不,这不是我在项目中使用的代码!)。
因此,我希望我的程序执行以下操作:
- 尝试除以零
- 如果步骤 #1失败,我希望 'catch' 语句运行其代码(在此示例中应该再次失败)。
- 如果步骤 #1 和 #2 都失败了,我希望我的程序在“finally”语句中显示 MessageBox。
我什至接近这个?