问题标签 [try-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.
python - Python try finally 块返回
下面有一段有趣的代码:
请有人解释一下,什么结果将返回这两个函数并解释原因,即描述执行顺序
c# - using 块:对象初始化编译成 try 块
在我的项目中,我有一个构造函数可以抛出的对象。所以我使用的代码如下:
正如在 C# 中“使用”的使用中所指的那样,代码如下
由 .NET CLR 转换为
问题是:我能否以某种方式让 CLR 将对象的构造函数放入 try 块中?
c# - 枚举 over yield 方法时可能不会调用 finally 块
我发现未调用 finally 块的情况。
重点:
结果:
因此,看起来如果有人正在使用我的 yielding 方法并使用枚举器(而不是 foreach)手动使用它,那么我的 finally 块永远不会被调用。
有什么办法可以确保我的方法最终确定它的资源?这是“产生语法糖”中的一个错误,还是它按预期工作?
delphi - 进一步澄清:如何正确编写 Try..Finally..Except 语句?
RE:如何正确编写 Try..Finally..Except 语句?
我仍然对OP的原始问题感到困惑。具体来说,读取“Screen.Cursor:=crDefault”的过程的最后一行(try..finally..end 之外)。
我的理解是,在 try..except|finally..end 块中引发的任何异常都将在“try”的“end”之后执行代码。
在上面的例子中,我看不出“Screen.Cursor:=crDefault”不会被执行的任何原因。如果我错了,请纠正我。
作为另一个示例,我编译了这段代码来帮助说明。运行代码时,将显示三 (3) 个 ShowMessage() 对话框。第一个“异常引发”,第二个“最终”和第三个“结束”。
所以,我很困惑为什么他的“Screen.Cursor:=crDefault”没有以原始形式和代码运行。有人可以详细说明吗?
java - 在 finally 块中的 closeConnection() 中关闭数据库连接
下面是我的代码片段
}
我想在finally
块中关闭此方法的连接,任何人都可以帮助...
我的要求是应该在这里打开连接......但connection.close()
需要在finally
块中......像这样:
java - finally 块何时相对于 return 运行
我昨天偶然发现了一个有趣的错误,并且已经修复了它,但今天早上它仍然困扰着我,所以我想看看是否有人可以对这个问题有所了解。
有问题的代码:
现在对于从那以后没有制作的部分。每隔一段时间,return 语句就会抛出一个异常,表明 getInt(int) 已在关闭的 ResultSet 上被调用。我验证了代码中的任何地方都没有关闭准备好的语句,如果数据库正在关闭,我也会看到其他错误。这让我相信,有时,finally 块会在 return 语句之前执行。我唯一能想到的是热点编译器并不总是正确的。我正在使用下面列出的 Oracle JVM。
java 版本“1.7.0_45”
Java(TM) SE 运行时环境(构建 1.7.0_45-b18)
Java HotSpot(TM) 64 位服务器 VM(构建 24.45-b08,混合模式)
我觉得我应该提一下,我已经看到了有关此排序的许多其他问题,但它们似乎都表明它是一成不变的,我似乎正在目睹一些不同的事情。
Try-catch-finally-return 澄清
https://stackoverflow.com/questions/20164755/the-order-of-invoking-finally-block
finally 总是在 Java 中执行吗?
java - 为什么在playframework renderbinary之后最终不阻止执行?
我最近惊讶地发现这个播放框架控制器动作代码中的 finally 块仅在异常之后被调用,但在调用实际成功时从未被调用。
当调用 renderBinary() 时,线程可能被终止或发生了什么,但对我来说,这是不直观的。我怀疑其他 render() 调用也会发生同样的事情,但我没有验证它。
我通过将 renderBinary() 移到 try/catch 之后解决了这个问题。进一步的调查显示 play 提供了一个 @Finally 注释来创建一个在控制器操作执行后执行的方法。这里需要注意的是,这将在控制器中执行任何操作后被调用,因此它可能并不总是一个好的选择。
我的问题是:为什么 finally 块在 renderBinary() 之后没有被执行,这在任何地方都有记录吗?我在播放文档中找不到任何参考。
为了阐明导致这一发现的事件顺序:
由于 finally 块而应该被删除的文件没有被删除。
考虑到它不可能是由非执行 finally 块引起的,我更改了方法以使用 Amazon SQS 消息队列在 finally 块中发送消息——一个单独的作业接收消息并删除相关文件。
消息没有被发送。
我在代码中设置断点并确定正在调用 renderBinary,但 finally 块没有被执行。
为了安全起见,我在 finally 子句中添加了日志消息,但这些也不存在。
我重复了几次调试练习,每次都没有执行 finally 子句。
(请注意,实际代码并不像上面那样。这是一个非常简化的示例,只是为了说明情况。)
c# - using 语句的目的是什么?
根据此网页上所写的内容,如果我理解正确,该using
语句的工作方式类似于 a try/finally
,因此我可能会错误地认为,如果语句中发生异常using
,它不应该使程序崩溃。
但是,当DownloadString
下面示例中显示的方法抛出 aWebException
时,程序会崩溃。
这是正常的,因为该using
语句不像 a 那样工作try/catch/finally
,所以实际上没有处理任何异常。但后来我想知道该声明的目的是什么using
。
更新...根据下面的回复,我添加了以下注意事项。基本上,如果我需要处理异常,可能的解决方案如下。
- 将
using
语句放在try/catch
块中。 - 仅将
DonwloadString
方法放在try/catch
块内。 - 手动编写 try/catch/finally 块,如下面的代码示例所示。
第三种解决方案的示例代码。
c# - 最有效的 try/finally/dispose
我有这个方法,我可能会传递一个 DbContext 或者我可能不会:
我正在执行 2 个三元操作,1 个确定是否应该进行 dispose,另一个确定是否需要创建新的 dbContext。
问题:两个三元操作的条件完全相同(db == null)
,有没有办法可以在一个操作中设置我的dispose
和我的db
变量?
java - 在 try 块中处理 JDialog 是否安全,然后在匹配的 finally 块中继续执行代码?
我试过四处寻找这个问题,因为我想它一定是在某个时候被问过的,但这是我能找到的最接近的东西Remove Top-Level Container on Runtime。
我的问题是,JDialog
在调用dispose()
该对话框之后,如果 dispose 在 a 中完成try
并且执行代码在 a 中完成,在 a 中执行代码是否安全finally
?
这是一个示例来演示我的要求:
根据我对dispose()
过程和finally
块的了解,如果不是一个好主意,我会说它应该可以正常工作。确实运行上述代码确实成功打印。
尽管 GC 有可能在try
/之间开始finally
并导致一些问题吗?