3

我有一个全局实例,我希望__del__在 Python 解释器退出时将其销毁(调用函数)。我是否对 Python 解释器期望过高?我的测试方法是在__del__函数中打印,从命令行运行python.exe,然后按 Ctrl/Break。此时,我希望在命令行窗口中看到打印。但是,我没有。

4

2 回答 2

6

是的,你期望太高了。Python对调用不做任何保证__del__

不能保证__del__()为解释器退出时仍然存在的对象调用方法。

编辑:

通常,您应该避免使用__del__. 在大多数情况下,上下文管理器更好。在极少数情况下,当您需要确保在解释器退出时清理某些外部(即从 C 代码中分配的)资源时,您可以使用该atexit模块

于 2013-03-20T23:21:36.213 回答
4

signal.SIGBREAK您可以为信号添加一个处理程序。那会让你拦截ctrl+ break。形成文档

import signal, os

def handler(signum, frame):
    print 'Someone is trying to exit!', signum

signal.signal(signal.SIGBREAK, handler)
于 2013-03-20T23:18:57.213 回答