asyncore.py

时间:2015-05-24 20:10:11

标签: python-3.x asyncore

当我尝试运行我在Windows上编写的python(3.4.3)程序时,我会多次重复以下错误消息,直到出现最大递归深度错误:

File "C:\Anaconda3\lib\asyncore.py", line 411, in __getattr__
File "C:\Anaconda3\lib\asyncore.py", line 411, in __getattr__
File "C:\Anaconda3\lib\asyncore.py", line 411, in __getattr__
retattr = getattr(self.socket, attr)
retattr = getattr(self.socket, attr)

我进行了谷歌搜索,并且Python 3.2和3.1中的asyncore.py显然存在导致这种情况发生的问题,但它应该是固定的。甚至更奇怪,当我在Linux上运行相同的程序时,一切都运行良好。

可能导致此错误的原因是什么?

1 个答案:

答案 0 :(得分:1)

Python中这些错误的常见原因是覆盖了属性查找。 python类有两个属性:getattrgetattribute

self.__getattribute__未定义时,如果找不到某个类的属性,则会调用self.__getattr__,并且无论它返回的是什么,都会使用该值。但是,当定义self.__getattribute__时,Python会直接调用它,并且它可以通过self.__getattribute__方法返回合理的内容。

使用这两种方法,可能会出现__getattr__ / __getattribute__不断引用不存在的self上的属性的情况,以及{{1然后一次又一次地调用/ __getattr__,直到最终Python耗尽堆栈空间。