object.__del__(self)是刷新日志类的最合适位置吗?



我有一个Python脚本的自定义日志类,其中flush()方法print()是列表的内容。

我想在特殊的__del__()方法中包含flush(),以防程序在没有刷新日志的情况下结束。然而,文档中的注释指出:

[…当del()被调用以响应一个模块被删除时(例如,当程序执行完成时),del()方法引用的其他全局变量可能已经被删除或正在被删除(例如,导入机器关闭)。

有没有人推荐一种不同的方法来做这件事,如果有,为什么?

您可能想把这个日志记录器变成一个上下文管理器。在异常终止的情况下,这仍然不会冲洗,但很少有东西会冲洗。但是__del__可能不会在对象上被调用,即使在正常的终止中。

日志记录器可能是使用with语句时不太适合的东西之一,因为它们是非常全局的,所以不确定上下文管理器是否适合。

最新更新