我想在一个类中使用ConfigParser,它需要来自析构函数的调用,但随后会发生奇怪的事情.
这是我的代码:
"""
function name is
test ok!
test1 failed!
test2 failed!
test3 failed!
test4
... ok!
"""
def test3():
pass
class Class1:
def __del__(self):
test3()
if __name__=="__main__":
obj=Class1()
Run Code Online (Sandbox Code Playgroud)
如果函数被命名test1,test2或者test3,将引发异常,我无法捕获它try except.
追溯是:
E:\tc.py
Exception TypeError: "'NoneType' object is not callable" in <bound method Class1.__del__ of <__main__.Class1 instance at 0x00C18F58>> ignored
Run Code Online (Sandbox Code Playgroud)
太奇怪了!你能在你的系统中测试它吗?或者我做错了什么?
未定义对象的销毁顺序.这意味着,在obj.__del__()被调用的时候- 如果它被调用 - test3()可能已经或可能没有被销毁.
文档中有一个带警告的红色框:
警告由于
__del__()调用方法的不稳定情况,将忽略执行期间发生的异常,并打印警告sys.stderr.此外,当__del__()响应于被删除的模块而调用时(例如,当完成程序的执行时),该__del__()方法引用的其他全局变量可能已被删除或正在被拆除(例如,导入机器关闭) ).因此,__del__()方法应该做到维持外部不变量所需的绝对最小值.从版本1.5开始,Python保证在删除其他全局变量之前,从其模块中删除名称以单个下划线开头的全局变量; 如果不存在对此类全局变量的其他引用,这可能有助于确保在__del__()调用方法时导入的模块仍然可用.
在Python中,几乎从不覆盖__del__.您应该重新考虑您的设计.请参阅如何正确清理Python对象?
| 归档时间: |
|
| 查看次数: |
1860 次 |
| 最近记录: |