Python - 析构修改全局变量异常(__del__ of <__main__)

来源:互联网 发布:玩dnf老是网络中断 编辑:程序博客网 时间:2024/05/29 08:34

析构(__del__)修改全局变量异常(__del__ of <__main__)


本文地址: http://blog.csdn.net/caroline_wendy/article/details/23377053


异常描述: "Exception AttributeError: "'NoneType' object has no attribute 'number'" in <bound method Girl.__del__ of <__main__.Girl object at 0x01D60ED0>> ignored"

出现在析构(__del__)中, 操作类的变量, 有可能, 导致在析构类之后, 类的变量不存在, 造成异常;

注意Python文档中,__del__的警告信息, 可以查询;

也可参见: http://bytes.com/topic/python/answers/41024-python-bug-processing-__del__-method

解决方法, 析构时, 操作本类的全局变量(self.__class__).

代码:

# -*- coding: utf-8 -*-#eclipse pydev, python 3.3#by C.L.Wangclass Girl:        _number = 0        def __init__(self, name):        self.name = name        Girl._number += 1        def __del__(self):        Girl._number -= 1        #self.__class__.number -= 1            def sayName(self):        print(self.name)    @staticmethod    def howMany():        '''静态方法'''        print("I know {0:d} girls. ".format(Girl._number))        Girl.howMany()wang = Girl('Wang')Girl.howMany()liu = Girl('Liu')Girl.howMany()print(list(globals()))

输出:

I know 0 girls. I know 1 girls. I know 2 girls. ['Girl', '__builtins__', '__name__', '__loader__', '__package__', '__cached__', '__doc__', '__file__', 'liu', 'wang']Exception AttributeError: "'NoneType' object has no attribute '_number'" in <bound method Girl.__del__ of <__main__.Girl object at 0x01D82CF0>> ignoredException AttributeError: "'NoneType' object has no attribute '_number'" in <bound method Girl.__del__ of <__main__.Girl object at 0x01D70ED0>> ignored

因为'Girl'全局类, 出现在实例之前, 即'wang', 'liu', 所以出现警告, 修改:

    def __del__(self):        #Girl._number -= 1        self.__class__._number -= 1

即可.




1 0
原创粉丝点击