使用Module生成NoneType AttributeError

时间:2018-01-17 16:02:29

标签: python

代码看起来像这样:

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。

1 个答案:

答案 0 :(得分:1)

您不应该依赖__del__回调中的任何导入函数,因为它们将首先被删除。您可以直接缓存Exception类(所有异常的基类),也可以忽略错误。 __del__中的错误将被忽略,只需在控制台中打印警告。