Baoqiu Cui wrote:
Today I was playing with a small Python program using Python 2.4
on Cygwin (up-to-date version, on Windows XP), but ran into a
strange error on the following small program (named bug.py):

-------------------------------
#!/usr/bin/python

class Person:
population = 0
def __del__(self):
Person.population -= 1

peter = Person()
-------------------------------

The error returned is this:

$ python bug.py
Exception exceptions.AttributeError: "'NoneType' object has no
attribute 'population'" in <bound method Person.__del__ of
<__main__.Person instance at 0xa0c9fec>> ignored

However, if I rename variable name 'peter' to something like 'peter1'
or 'david', the error is gone.  Looks to me the
error only happens to variable name 'peter'.

Does anyone know what is wrong? Is this a bug only on Cygwin?

I get this error on a normal Python WinXP install too. Looks like Python deletes globals in order when exiting, so the Person class gets deleted before the Person instances:


---------- bug.py ----------
class Person(object):
    population = 0
    def __del__(self):
        Person.population -= 1

<name> = Person()
print list(globals())
----------------------------

I tried this with a few different names. Here are the results for 'apple', 'banana' and 'cranberry'. Only when the name appears after 'Person' in the globals do I get the error that you get.

[D:\Steve]$ bug.py
['apple', '__builtins__', '__file__', 'Person', '__name__', '__doc__']

[D:\Steve]$ bug.py
['__builtins__', '__file__', 'banana', 'Person', '__name__', '__doc__']

[D:\Steve]$ bug.py
['__builtins__', '__file__', 'Person', 'cranberry', '__name__', '__doc__']
Exception exceptions.AttributeError: "'NoneType' object has no attribute 'population'" in <bound method Person.__del__ of <__main__.Person object at 0x009D1A50>> ignored


I don't know whether this is a bug or a "feature".  ;)

Steve
--
http://mail.python.org/mailman/listinfo/python-list

Reply via email to