代码看起来像这样:
import foo
import snoo
Class Blah:
# stuff
def Cleanup(self):
if self.thing is not None:
try:
foo.helpCleanup()
except snoo.specificException(ALREADY_CLEANED_UP):
pass
self.thing = None
def __del__(self):
self.Cleanup()
# other stuff
读取snoo.specificException(ALREADY_CLEANED_UP)的行:
抛出异常,如:AttributeError:“'NoneType'对象没有'specificException'”
有人可以解释这是如何工作的吗?我曾经使用过python,但我不是一个如何清理它的专家。在我看来,在垃圾收集器销毁此对象时,模块snoo已经被卸载了。有没有更好的方法来处理这个问题而不是捕获AttributeError?我担心捕获AttributeError可能会在以后掩盖真正的失败,尽管我们使用的是一个尽管不是所有这些事先捕获的linter。
答案 0 :(得分:1)
您不应该依赖__del__
回调中的任何导入函数,因为它们将首先被删除。您可以直接缓存Exception类(所有异常的基类),也可以忽略错误。 __del__
中的错误将被忽略,只需在控制台中打印警告。