问题标签 [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.
multithreading - Delphi 线程超时导致泄漏
所以,我已经使用 THandle 实现了线程,就像这样:
当线程正常时(没有达到超时并且进程没有提前结束)没有任何泄漏,但是如果线程有问题并达到超时,它会给我很多泄漏,因为,我猜猜,它只是离开了函数,忽略了所有的尝试......最后我释放了所有东西。
有没有办法完成线程,并杀死它允许的泄漏?
python - try-except-finally 代码在线程应用程序中未按预期工作
如果线程/进程被杀死,执行突然停止是有意义的
为什么在我的终端窗口点击[X]正常退出主程序时它不会执行清理代码?
我仍在学习多线程应用程序的来龙去脉,我认为我的问题来自于不了解 Python 如何处理杀死后台线程。
问题:
- 为什么我的块不会
finally:
一直执行? - 什么时候不会
finally:
执行块? - 当线程被杀死时,线程内的代码执行会发生什么?
- 当您退出主进程时,守护程序/非守护程序线程会发生什么?
细节:
我正在尝试使用 ZMQ 套接字编写一个多线程程序,该套接字(除其他外)将内容写入日志文件。我希望日志线程在它死之前无条件地执行一些消息传递和清理,但大多数时候不会。
下面的函数在后台线程中启动一个无限循环,并返回一个zmq.PAIR
用于通信的套接字。它开始的循环侦听一个套接字,写入该套接字的任何内容都会写入文件。该循环还(应该)发回诊断消息,例如“我现在开始登录!”,“糟糕,出现错误!” “我现在要退出”。所以主程序可以密切关注它。
该main
程序使用此模式生成一些线程来监视/控制不同的位和部分。它轮询几个 ZMQ 套接字(连接到 STDIN 和串行端口)以获取消息,并将其中的一些转发到连接到文件的套接字。
但现在我被困住了。该main
程序的路由和控制逻辑工作正常。get_logfile_sock
的文件写入工作正常,正常的异常处理按预期工作。但是当线程从主程序中被终止时,或者当我完全停止主程序时,“我现在退出”代码不会执行。
例子:
java - 即使在 Junit 测试从“try”块中抛出断言错误之后,“finally”块会触发吗?
writer.close()
块内的方法会finally { }
在 Junit 断言错误上运行吗?
假设以下代码:
现在该finally()
块会像常规流程一样运行吗?
c# - 尝试在 finally 块中
这个可以吗?将终结器作为另一个try/finally
块(因为finalizer_operationX()
可能会抛出,我必须确保very_critical...()
最后会发生。
快速谷歌搜索try in finally 块什么都没有(如果你给我一个重复的链接,会删除问题),它应该可以工作,但我不确定它的设计和可能的问题。
delphi - Delphi - except 和 finally 块的“正确”顺序是什么?
假设我有以下例程:
有except
和finally
转置的含义是什么?我已经看到很多关于它们的帖子,但是我还没有看到一个明确的解释,说明在哪种情况下哪个是合适的(我仍然认为在上面的构造中,块在块之后执行很奇怪!finally
)。except
我还看到一些帖子表明混合try..except
和try..finally
块不是一个好主意。在例程作为正常操作的一部分抛出异常的情况下(例如在某些 Indy 例程中),如何避免它?
java - 为什么 Java 编译器复制 finally 块?
使用简单try/finally
块编译以下代码时,Java 编译器会生成以下输出(在 ASM 字节码查看器中查看):
代码:
字节码:
在中间添加一个catch
块时,我注意到编译器复制了该finally
块3次(不再发布字节码)。这似乎浪费了类文件中的空间。复制似乎也不限于最大数量的指令(类似于内联的工作方式),因为finally
当我添加更多对System.out.println
.
但是,我的自定义编译器使用不同方法编译相同代码的结果在执行时完全相同,但使用GOTO
指令需要更少的空间:
为什么 Java 编译器(或 Eclipse 编译器)会finally
多次复制块的字节码,甚至athrow
用于重新抛出异常,而使用 可以实现相同的语义goto
?这是优化过程的一部分,还是我的编译器做错了?
(两种情况下的输出都是......)
python - 为什么`finally: return 42`会清除未捕获的异常?
今天,这段有趣的 Python 代码发布在 Twitter 上。
执行它时,f()
返回42
并且没有异常冒泡堆栈,正如我所期望的那样。当替换return 42
with eg aspass
语句时,异常会按预期传播到函数外部。
但是,我想知道为什么在使用return
. 毕竟,还有一个未捕获的异常。
这raise
是否意味着 python 函数可以自动清除异常?return
return
python - 将整个主循环包装在 try..finally 块中是否合理?
我已经Python2.7.9
为一个小项目制作了一个地图编辑器,并且我正在寻找在发生一些未处理的异常时保留我编辑的数据的方法。我的编辑器已经有了保存数据的方法,我目前的解决方案是将主循环包裹在一个try..finally
块中,类似于这个例子:
这似乎是确保无论发生什么情况,都会尝试在编辑器saveFile()
崩溃的情况下保留编辑器的当前状态(在能够这样做的范围内)的最佳方式。但是我想知道将我的整个主循环封装在一个try
块中是否实际上是安全、高效和良好的形式。是吗?是否存在风险或问题?有没有更好或更传统的方法?
java - 在 finally 块中处理
我有一些创建 aJarFile
和 a 的代码URLClassLoader
,我想在最后关闭它们。自然地,我决定使用finally
块来处理清理:
但是,两个close()
调用都可能引发异常,因此如果jar.close()
会引发异常,则loader.close()
不会到达。我考虑解决此问题的一种方法是jar.close()
使用 try-catch 块:
但这似乎丑陋和过分。是否有一种优雅的方式来处理finally
块中与清理相关的异常?