Python - 析构修改全局变量异常(__del__ of <__main__)
2014-04-10 20:44
417 查看
析构(__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.Wang
class 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>> ignored
Exception 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
即可.
相关文章推荐
- PyCon 2011 - Hidden Treasures of the Python Standard Library - 全局异常捕获
- python 全局变量引用与修改
- 实例讲解Python中global语句下全局变量的值的修改
- Python 全局变量修改--global
- 实例讲解Python中global语句下全局变量的值的修改
- 零基础学python-16.5 模块间全局变量的修改以及其他访问全局变量的方法
- python中怎样修改全局变量
- Python global全局变量只能在函数中没做global申明,可以引用但修改会报错。
- Python多模块全局变量引用和修改
- python 中全局变量的修改
- python:线程的使用、线程共享全局变量、列表作为参数(全局变量)、避免全局变量被修改
- 【python】为什么修改全局的dict变量不用global关键字
- python:线程的使用、线程共享全局变量、列表作为参数(全局变量)、避免全局变量被修改
- python 全局变量引用与修改
- 零基础学python-16.5 模块间全局变量的修改以及其他访问全局变量的方法
- 飘逸的python - 为什么修改全局的dict变量不用global关键字
- 零基础学python-16.5 模块间全局变量的修改以及其他访问全局变量的方法
- 为什么python在函数中修改"字典型全局变量"不需要global
- python全局变量在 函数中 修改
- 震惊!Python竟然是这样的修改全局变量