首页 > 解决方案 > 如何确保 io 模块在关闭垃圾收集之前没有关闭

问题描述

我有一个带有__del__方法的对象。我希望在解释器关闭时调用此方法。该__del__方法将打开并写入某个文件。似乎io模块在全局垃圾收集之前已关闭。

#!/usr/bin/env python3
class Foo:
    def __del__(self):
        with open('/tmp/doge_poop', 'w') as f:
            f.write('corn kernel')
foo=Foo()

运行上述 MWE 会给出以下结果:

Exception ignored in: <function Foo.__del__ at 0x7f4984176310>
Traceback (most recent call last):
  File "b.py", line 4, in __del__
NameError: name 'open' is not defined

标签: pythongarbage-collection

解决方案


找到了一个方法:

#!/usr/bin/env python3
from atexit import register
class Foo:
    def __del__(self):
        with open('/tmp/doge_poop', 'w') as f:
            f.write('corn kernel')
            print("delete!")
foo=Foo()

@register
def _atexit():
    global foo
    del foo

由组中的成员帮助https://t.me/py_zh_real


推荐阅读