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

python - python try-finally

为什么没有foo注意到whiz中的异常,但bar引发了异常?

0 投票
3 回答
1730 浏览

c++ - 在这种情况下是否可以避免复制 lambda 仿函数?

我在 C++11 中使用 lambda制作了一个finally模拟器,如下所示:

代码按预期工作,但在Finalizer结构 (1)的 ctor 处存在不需要的复制 ctor 调用(lambda 仿函数)。(谢天谢地,RVO 避免了finally函数 (3 -> 4) 中 return 语句的复制构造。)

编译器不会消除复制 ctor 调用(至少在 vc10 中 - gcc 可能会对其进行优化),并且如果将Finalizer struct (2) 中的仿函数类型更改为引用,它将崩溃,因为finally调用中的 lambda 参数 ( 4) 是 r 值。

当然,代码可以像下面这样“优化”

没有开销,只在作用域末尾放置了一个printf调用。但是……我不喜欢。:( 我试图用宏包装它,但它需要声明两个“名称”——一个用于 lambda 对象,另一个用于终结器对象。

我的目标很简单——

  1. 应该消除所有可以避免的不必要的性能开销。理想情况下,不应该有函数调用,每个过程都应该内联。
  2. 保持简洁的表达作为效用函数的目的。允许使用宏,但不鼓励使用。

对于这种情况,有什么解决方案可以避免它吗?

0 投票
2 回答
5819 浏览

c# - foreach 循环终于

我有一个包含 try catch 和 finally 的 foreach 循环。它遍历文件夹中的文件,最后将它们全部删除....但是现在如果我有两个文件,因为它正在删除所有文件(由于应用程序功能,我需要删除所有文件)它不会通过第二个文件。是否可以让 foreach 循环完成然后删除 foreach 方法中的所有文件这是一个示例:

希望它足够清楚。

0 投票
5 回答
10793 浏览

exception-handling - try catch/except finally 语句中 finally 的意义是什么

多年来,我一直在多种语言中使用 try-catch/except-finally 变体,今天有人问我 finally 的意义何在,我无法回答。

基本上你为什么要在 finally 中添加一个语句,而不是在整个 try-catch 块之后添加它?或者换句话说,以下代码块之间是否存在差异:

编辑:
人们,我知道 finally 会做什么,我已经使用它很长时间了,但是我的问题是在上面的示例//c中,最后输入 finally 似乎是多余的,不是吗?

0 投票
7 回答
2166 浏览

c# - C# 中的 finally 块是必须的吗?

2个条件有什么区别?每次运行method1或method2时,都应该有一个代码块需要运行。在我看来,两种方法是相同的。

finally 块对我来说似乎是不必要的。

0 投票
1 回答
222 浏览

sql - SQL SMO exception causes finally block to be skipped?

I created a VS2010 Windows service project. In it I invoke the method Microsoft.SqlServer.Management.Smo.Database.ExecuteWithResults(expression). In my scenario the expression contains invalid SQL, so the call fails with an exception as expected.

What's not expected is that the method is invoked within a try/finally block, but the finally block is NEVER executed:

However, if I change it to a try/catch/finally block, both the catch and finally code is invoked.

Am I missing something here? Shouldn't a finally block always get executed?

0 投票
6 回答
183 浏览

java - finally 阻止行为不同

我有这样的条件

现在我想总结一下str = "condition3";。由于 finally 块总是运行,因此无法满足我的需求。还有什么可以做的。

0 投票
1 回答
613 浏览

c# - .NET 会停止调试运行 finally 块中的代码吗?

好吧,我已经阅读(并了解到)finally 块并不总是执行它的代码(即使除了拔掉插头)。
仅供参考有关更多信息,请参阅try catch finally 问题

但是,我还没有发现:
当我停止调试器时,我的 finally 块是否被执行?

谢谢!

0 投票
7 回答
926 浏览

java - 奇怪的最终行为?

为什么hii从函数返回后打印出来go(),finally块中的值变成了“hello”?

程序的输出是

0 投票
1 回答
1194 浏览

java - Java catch/finally 块完全跳过?

我们有一个 ThreadPoolExecutor-back 任务执行模块。有些任务显然在应用程序代码中完成了,但是工作代码以某种方式跳过了所有的 try/catch/finally 并继续执行下一个任务,导致前一个任务错过了重要的状态报告代码。

就像在这个例子中一样,257832:5 被线程 8 拾取,但这个线程最终只是启动了另一个任务。

ThreadPoolExecutor 的 Runnable 看起来不错。看起来像

笔记:

  1. 我们捕获了最终的 Throwable 但两个任务之间没有记录异常
  2. 没有迹象表明 exit() 被调用或程序重新启动
  3. 第一个跳过所有日志行,无论是在调用应用程序代码之后的那个还是在 catch 和 finally 块中的那个,并跳过状态报告代码
  4. 这只会以低概率随机发生;但是由于执行的任务量很大,还是让我们很头疼。

就好像线程池执行器只是神奇地驱逐了正在运行的可运行对象(否则它需要一个 InterruptedException,它会被捕获为 Throwable;Java 线程不会以非合作方式停止,除非在关闭/退出期间)并跳过所有块。我检查了 ThreeadPoolExecutor javadoc,没有什么会导致这样的事件发生。

可能发生了什么?