2007年05月06日 星期日 21:29
¸½¼þÖеijÌÐòͨ¹ýpython foo.pyÖ´ÐУ¬³öÏÖÒÔÏÂÌáʾÐÅÏ¢£º Exception exceptions.AttributeError: "'NoneType' object has no attribute 'population'" in<__main__.Person instance at 0x2aaaaab2ee60>> ignored foo.pyÀïÃæµÄ³ÌÐòºÜ¼òµ¥£¬¾ÍÊÇÈçÏ£º class Person: population = 0 def __init__(self): Person.population += 1 def __del__(self): Person.population -= 1 tom = Person() Ê×ÏÈÎÒÏëÎÊһϣ¬ÉÏÃæÌáµ½µÄ´íÎóÐÅÏ¢ÊÇʲôÔÒòÔì³ÉµÄ£¿ ÁíÍ⣬ÓÐÒ»¸öÏ൱Ææ¹ÖµÄÏÖÏ󣡣¡ÎÒ°Ñ×îºóÄǾäµÄtom¸Ä³ÉÆäËûÈçjerry£¬¾ÍûÓгöÏÖÈκδíÎóÐÅÏ¢£¿£¡±äÁ¿µÄÃüÃûÓÐʲô¹æÂÉô£¿ÎÒÊÇÕÒ²»µ½À£¬¸Ä³ÉaûÎÊÌ⣬¸Ä³ÉpÓÖ³öÏÖÎÊÌâ....ºÃÆæ¹Ö°¡£¿£¿ÄãÃÇÓÐÕâÖÖÇé¿öô£¿ -------------- 下一部分 -------------- class Person: population = 0 def __init__(self): Person.population += 1 def __del__(self): Person.population -= 1 tom = Person()
2007年05月06日 星期日 22:41
priboy 写道: > 附件中的程序通过python foo.py执行,出现以下提示信息: > > Exception exceptions.AttributeError: "'NoneType' object has no > attribute 'population'" in> <__main__.Person instance at 0x2aaaaab2ee60>> ignored > > foo.py里面的程序很简单,就是如下: > > class Person: > population = 0 > > def __init__(self): > Person.population += 1 > > def __del__(self): > Person.population -= 1 > > tom = Person() > > 首先我想问一下,上面提到的错误信息是什么原因造成的? > > 另外,有一个相当奇怪的现象!!我把最后那句的tom改成其他如jerry,就没有 > 出现任何错误信息?!变量的命名有什么规律么?我是找不到拉,改成a没问 > 题,改成p又出现问题....好奇怪啊??你们有这种情况么? Person.population应该写作self.population吧?
2007年05月06日 星期日 22:42
Python2.5下运行,没有你所说的问题,也不应该出现这样的问题。更新Python版 本看看。 priboy wrote: > 附件中的程序通过python foo.py执行,出现以下提示信息: > > Exception exceptions.AttributeError: "'NoneType' object has no > attribute 'population'" in> <__main__.Person instance at 0x2aaaaab2ee60>> ignored > > foo.py里面的程序很简单,就是如下: > > class Person: > population = 0 > > def __init__(self): > Person.population += 1 > > def __del__(self): > Person.population -= 1 > > tom = Person() > > 首先我想问一下,上面提到的错误信息是什么原因造成的? > > 另外,有一个相当奇怪的现象!!我把最后那句的tom改成其他如jerry,就没有 > 出现任何错误信息?!变量的命名有什么规律么?我是找不到拉,改成a没问 > 题,改成p又出现问题....好奇怪啊??你们有这种情况么? > ------------------------------------------------------------------------ > > class Person: > population = 0 > > def __init__(self): > Person.population += 1 > > def __del__(self): > Person.population -= 1 > > tom = Person() > > ------------------------------------------------------------------------ > > _______________________________________________ > python-chinese > Post: send python-chinese在lists.python.cn > Subscribe: send subscribe to python-chinese-request在lists.python.cn > Unsubscribe: send unsubscribe to python-chinese-request在lists.python.cn > Detail Info: http://python.cn/mailman/listinfo/python-chinese
2007年05月07日 星期一 04:28
这个问题是存在的。 我的机器是 ubuntu 7.04, Py版本 2.5。 我的感觉是 __del__。这个函数Py的Manual是不推荐你用的。大致问题出在这里。 等我查查文档再回信。 On 5/6/07, Hong Yuan <hongyuan在homemaster.cn> wrote: > Python2.5下运行,没有你所说的问题,也不应该出现这样的问题。更新Python版 > 本看看。 > > priboy wrote: > > 附件中的程序通过python foo.py执行,出现以下提示信息: > > > > Exception exceptions.AttributeError: "'NoneType' object has no > > attribute 'population'" in> > <__main__.Person instance at 0x2aaaaab2ee60>> ignored > > > > foo.py里面的程序很简单,就是如下: > > > > class Person: > > population = 0 > > > > def __init__(self): > > Person.population += 1 > > > > def __del__(self): > > Person.population -= 1 > > > > tom = Person() > > > > 首先我想问一下,上面提到的错误信息是什么原因造成的? > > > > 另外,有一个相当奇怪的现象!!我把最后那句的tom改成其他如jerry,就没有 > > 出现任何错误信息?!变量的命名有什么规律么?我是找不到拉,改成a没问 > > 题,改成p又出现问题....好奇怪啊??你们有这种情况么? > > ------------------------------------------------------------------------ > > > > class Person: > > population = 0 > > > > def __init__(self): > > Person.population += 1 > > > > def __del__(self): > > Person.population -= 1 > > > > tom = Person() > > > > ------------------------------------------------------------------------ > > > > _______________________________________________ > > python-chinese > > Post: send python-chinese在lists.python.cn > > Subscribe: send subscribe to python-chinese-request在lists.python.cn > > Unsubscribe: send unsubscribe to python-chinese-request在lists.python.cn > > Detail Info: http://python.cn/mailman/listinfo/python-chinese > > _______________________________________________ > python-chinese > Post: send python-chinese在lists.python.cn > Subscribe: send subscribe to python-chinese-request在lists.python.cn > Unsubscribe: send unsubscribe to python-chinese-request在lists.python.cn > Detail Info: http://python.cn/mailman/listinfo/python-chinese
2007年05月07日 星期一 04:50
Py的 __del__调用是完全不可预料的。这就是一例。 之所以会出现这个错误,是因为Py在解释完程序作清理的时候,先把 Person类给回收了,等到它回收tom这个instance的时候才发现,Person已经变成None了,population变量自然也不知所踪了。 你可以在foo.py的最后加一句, print vars() 你会发现,如果变量名(tom, jerry)在 Person之前,则程序不会报错,如果在Person之后,则肯定报错。 总之,Py的__del__比较怪异,用的时候要特别小心。 On 5/6/07, shhgs <shhgs.efhilt在gmail.com> wrote: > 这个问题是存在的。 > > 我的机器是 ubuntu 7.04, Py版本 2.5。 > > 我的感觉是 __del__。这个函数Py的Manual是不推荐你用的。大致问题出在这里。 > > 等我查查文档再回信。 > > On 5/6/07, Hong Yuan <hongyuan在homemaster.cn> wrote: > > Python2.5下运行,没有你所说的问题,也不应该出现这样的问题。更新Python版 > > 本看看。 > > > > priboy wrote: > > > 附件中的程序通过python foo.py执行,出现以下提示信息: > > > > > > Exception exceptions.AttributeError: "'NoneType' object has no > > > attribute 'population'" in> > > <__main__.Person instance at 0x2aaaaab2ee60>> ignored > > > > > > foo.py里面的程序很简单,就是如下: > > > > > > class Person: > > > population = 0 > > > > > > def __init__(self): > > > Person.population += 1 > > > > > > def __del__(self): > > > Person.population -= 1 > > > > > > tom = Person() > > > > > > 首先我想问一下,上面提到的错误信息是什么原因造成的? > > > > > > 另外,有一个相当奇怪的现象!!我把最后那句的tom改成其他如jerry,就没有 > > > 出现任何错误信息?!变量的命名有什么规律么?我是找不到拉,改成a没问 > > > 题,改成p又出现问题....好奇怪啊??你们有这种情况么? > > > ------------------------------------------------------------------------ > > > > > > class Person: > > > population = 0 > > > > > > def __init__(self): > > > Person.population += 1 > > > > > > def __del__(self): > > > Person.population -= 1 > > > > > > tom = Person() > > > > > > ------------------------------------------------------------------------ > > > > > > _______________________________________________ > > > python-chinese > > > Post: send python-chinese在lists.python.cn > > > Subscribe: send subscribe to python-chinese-request在lists.python.cn > > > Unsubscribe: send unsubscribe to python-chinese-request在lists.python.cn > > > Detail Info: http://python.cn/mailman/listinfo/python-chinese > > > > _______________________________________________ > > python-chinese > > Post: send python-chinese在lists.python.cn > > Subscribe: send subscribe to python-chinese-request在lists.python.cn > > Unsubscribe: send unsubscribe to python-chinese-request在lists.python.cn > > Detail Info: http://python.cn/mailman/listinfo/python-chinese >
2007年05月07日 星期一 11:04
Çë½Ì: PIL 1.1.6 ÉÏ´«jpeg ʱ³öÏÖdecoder jpeg not available ´íÎó. PIL/Image.py in _getdecoder, line 375 Èç¹ûÔÚ ImageField ²»¼Ó¸ßºÍ¿íµÄËõÂÔʱ¾Í²»»á. height_field = '120', width_field = '80' µ«ÎÒ°²×°Ó¦¸ÃÊÇûʲôÎÊÌâµÄ! »·¾³: FreeBSD 6.2 + Python 2.5 + PIL 1.1.6 + jpegsrc-6b. л! -------------- 下一部分 -------------- Ò»¸öHTML¸½¼þ±»ÒƳý... URL: http://python.cn/pipermail/python-chinese/attachments/20070507/4cefdeb2/attachment.html
2007年05月07日 星期一 16:41
谢谢大家的解答,这个错误的产生确实是shhgs所说的那样... 另外,又有一个问题,我在其他地方得到这样一个信息: 把__init__和__del__中的Person.population改成self.__class__.population 即: class Person: population = 0 def __init__(self): self.__class__.population += 1 def __del__(self): self.__class__.population -= 1 tom = Person() 就不会产生上述错误。 Person跟self.__class__是什么关系?他们不是一个东西么?为什么Person没有了,而self.__class__还在? On 5/7/07, shhgs <shhgs.efhilt在gmail.com> wrote: > Py的 __del__调用是完全不可预料的。这就是一例。 > > 之所以会出现这个错误,是因为Py在解释完程序作清理的时候,先把 > Person类给回收了,等到它回收tom这个instance的时候才发现,Person已经变成None了,population变量自然也不知所踪了。 > > 你可以在foo.py的最后加一句, > > print vars() > > 你会发现,如果变量名(tom, jerry)在 Person之前,则程序不会报错,如果在Person之后,则肯定报错。 > > 总之,Py的__del__比较怪异,用的时候要特别小心。 > > On 5/6/07, shhgs <shhgs.efhilt在gmail.com> wrote: > > 这个问题是存在的。 > > > > 我的机器是 ubuntu 7.04, Py版本 2.5。 > > > > 我的感觉是 __del__。这个函数Py的Manual是不推荐你用的。大致问题出在这里。 > > > > 等我查查文档再回信。 > > > > On 5/6/07, Hong Yuan <hongyuan在homemaster.cn> wrote: > > > Python2.5下运行,没有你所说的问题,也不应该出现这样的问题。更新Python版 > > > 本看看。 > > > > > > priboy wrote: > > > > 附件中的程序通过python foo.py执行,出现以下提示信息: > > > > > > > > Exception exceptions.AttributeError: "'NoneType' object has no > > > > attribute 'population'" in> > > > <__main__.Person instance at 0x2aaaaab2ee60>> ignored > > > > > > > > foo.py里面的程序很简单,就是如下: > > > > > > > > class Person: > > > > population = 0 > > > > > > > > def __init__(self): > > > > Person.population += 1 > > > > > > > > def __del__(self): > > > > Person.population -= 1 > > > > > > > > tom = Person() > > > > > > > > 首先我想问一下,上面提到的错误信息是什么原因造成的? > > > > > > > > 另外,有一个相当奇怪的现象!!我把最后那句的tom改成其他如jerry,就没有 > > > > 出现任何错误信息?!变量的命名有什么规律么?我是找不到拉,改成a没问 > > > > 题,改成p又出现问题....好奇怪啊??你们有这种情况么? > > > > ------------------------------------------------------------------------ > > > > > > > > class Person: > > > > population = 0 > > > > > > > > def __init__(self): > > > > Person.population += 1 > > > > > > > > def __del__(self): > > > > Person.population -= 1 > > > > > > > > tom = Person() > > > > > > > > ------------------------------------------------------------------------ > > > > > > > > _______________________________________________ > > > > python-chinese > > > > Post: send python-chinese在lists.python.cn > > > > Subscribe: send subscribe to python-chinese-request在lists.python.cn > > > > Unsubscribe: send unsubscribe to python-chinese-request在lists.python.cn > > > > Detail Info: http://python.cn/mailman/listinfo/python-chinese > > > > > > _______________________________________________ > > > python-chinese > > > Post: send python-chinese在lists.python.cn > > > Subscribe: send subscribe to python-chinese-request在lists.python.cn > > > Unsubscribe: send unsubscribe to python-chinese-request在lists.python.cn > > > Detail Info: http://python.cn/mailman/listinfo/python-chinese > > > _______________________________________________ > python-chinese > Post: send python-chinese在lists.python.cn > Subscribe: send subscribe to python-chinese-request在lists.python.cn > Unsubscribe: send unsubscribe to python-chinese-request在lists.python.cn > Detail Info: http://python.cn/mailman/listinfo/python-chinese
2007年05月07日 星期一 18:51
有趣,可能是优化的结果? On 5/7/07, priboy <priboy.maillist在gmail.com> wrote: > > 谢谢大家的解答,这个错误的产生确实是shhgs所说的那样... > > 另外,又有一个问题,我在其他地方得到这样一个信息: > 把__init__和__del__中的Person.population改成self.__class__.population > 即: > > class Person: > population = 0 > > def __init__(self): > self.__class__.population += 1 > > def __del__(self): > self.__class__.population -= 1 > > tom = Person() > > 就不会产生上述错误。 > > Person跟self.__class__是什么关系?他们不是一个东西么?为什么Person没有了,而self.__class__还在? > > > > On 5/7/07, shhgs <shhgs.efhilt在gmail.com> wrote: > > Py的 __del__调用是完全不可预料的。这就是一例。 > > > > 之所以会出现这个错误,是因为Py在解释完程序作清理的时候,先把 > > > Person类给回收了,等到它回收tom这个instance的时候才发现,Person已经变成None了,population变量自然也不知所踪了。 > > > > 你可以在foo.py的最后加一句, > > > > print vars() > > > > 你会发现,如果变量名(tom, jerry)在 Person之前,则程序不会报错,如果在Person之后,则肯定报错。 > > > > 总之,Py的__del__比较怪异,用的时候要特别小心。 > > > > On 5/6/07, shhgs <shhgs.efhilt在gmail.com> wrote: > > > 这个问题是存在的。 > > > > > > 我的机器是 ubuntu 7.04, Py版本 2.5。 > > > > > > 我的感觉是 __del__。这个函数Py的Manual是不推荐你用的。大致问题出在这里。 > > > > > > 等我查查文档再回信。 > > > > > > On 5/6/07, Hong Yuan <hongyuan在homemaster.cn> wrote: > > > > Python2.5下运行,没有你所说的问题,也不应该出现这样的问题。更新Python版 > > > > 本看看。 > > > > > > > > priboy wrote: > > > > > 附件中的程序通过python foo.py执行,出现以下提示信息: > > > > > > > > > > Exception exceptions.AttributeError: "'NoneType' object has no > > > > > attribute 'population'" in> > > > > <__main__.Person instance at 0x2aaaaab2ee60>> ignored > > > > > > > > > > foo.py里面的程序很简单,就是如下: > > > > > > > > > > class Person: > > > > > population = 0 > > > > > > > > > > def __init__(self): > > > > > Person.population += 1 > > > > > > > > > > def __del__(self): > > > > > Person.population -= 1 > > > > > > > > > > tom = Person() > > > > > > > > > > 首先我想问一下,上面提到的错误信息是什么原因造成的? > > > > > > > > > > 另外,有一个相当奇怪的现象!!我把最后那句的tom改成其他如jerry,就没有 > > > > > 出现任何错误信息?!变量的命名有什么规律么?我是找不到拉,改成a没问 > > > > > 题,改成p又出现问题....好奇怪啊??你们有这种情况么? > > > > > > ------------------------------------------------------------------------ > > > > > > > > > > class Person: > > > > > population = 0 > > > > > > > > > > def __init__(self): > > > > > Person.population += 1 > > > > > > > > > > def __del__(self): > > > > > Person.population -= 1 > > > > > > > > > > tom = Person() > > > > > > > > > > > ------------------------------------------------------------------------ > > > > > > > > > > _______________________________________________ > > > > > python-chinese > > > > > Post: send python-chinese在lists.python.cn > > > > > Subscribe: send subscribe to > python-chinese-request在lists.python.cn > > > > > Unsubscribe: send unsubscribe to > python-chinese-request在lists.python.cn > > > > > Detail Info: http://python.cn/mailman/listinfo/python-chinese > > > > > > > > _______________________________________________ > > > > python-chinese > > > > Post: send python-chinese在lists.python.cn > > > > Subscribe: send subscribe to python-chinese-request在lists.python.cn > > > > Unsubscribe: send unsubscribe to > python-chinese-request在lists.python.cn > > > > Detail Info: http://python.cn/mailman/listinfo/python-chinese > > > > > _______________________________________________ > > python-chinese > > Post: send python-chinese在lists.python.cn > > Subscribe: send subscribe to python-chinese-request在lists.python.cn > > Unsubscribe: send unsubscribe to python-chinese-request在lists.python.cn > > Detail Info: http://python.cn/mailman/listinfo/python-chinese > _______________________________________________ > python-chinese > Post: send python-chinese在lists.python.cn > Subscribe: send subscribe to python-chinese-request在lists.python.cn > Unsubscribe: send unsubscribe to python-chinese-request在lists.python.cn > Detail Info: http://python.cn/mailman/listinfo/python-chinese -- ※※※※※※※※※※※※※※※※※※※※※※※※ My blog: http://blog.donews.com/ygao Forum http://groups.google.com/group/python_study ※※※※※※※※※※※※※※※※※※※※※※※※ -------------- 下一部分 -------------- 一个HTML附件被移除... URL: http://python.cn/pipermail/python-chinese/attachments/20070507/40d244fe/attachment.html
2007年05月07日 星期一 19:11
python在释放Person后把它重新赋值为None,注意这时Person变成一个变量,并不是一个对象,事实上原来Person指向的__main__.Person对象instance并没有释放,因为还有tom这个instance,应用计数还不是0;而tom的Person的instance的self.__class__由于保留了__main__.Person的地址所以依然可以访问。 对象的引用和C语言指针一样有时候是让人很头痛的;-) ----- Original Message ----- From: "priboy" <priboy.maillist at gmail.com> To: <python-chinese at lists.python.cn> Sent: Monday, May 07, 2007 4:41 PM Subject: Re: [python-chinese] 一个莫名其妙的问题 > 谢谢大家的解答,这个错误的产生确实是shhgs所说的那样... > > 另外,又有一个问题,我在其他地方得到这样一个信息: > 把__init__和__del__中的Person.population改成self.__class__.population > 即: > > class Person: > population = 0 > > def __init__(self): > self.__class__.population += 1 > > def __del__(self): > self.__class__.population -= 1 > > tom = Person() > > 就不会产生上述错误。 > > Person跟self.__class__是什么关系?他们不是一个东西么?为什么Person没有了,而self.__class__还在? > > vcc _
Zeuux © 2025
京ICP备05028076号