当我尝试运行我在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上运行相同的程序时,一切都运行良好。
可能导致此错误的原因是什么?
答案 0 :(得分:1)
Python中这些错误的常见原因是覆盖了属性查找。 python类有两个属性:getattr和getattribute。
当self.__getattribute__
未定义时,如果找不到某个类的属性,则会调用self.__getattr__
,并且无论它返回的是什么,都会使用该值。但是,当定义self.__getattribute__
时,Python会直接调用它,并且它可以通过self.__getattribute__
方法返回合理的内容。
使用这两种方法,可能会出现__getattr__
/ __getattribute__
不断引用不存在的self
上的属性的情况,以及{{1然后一次又一次地调用/ __getattr__
,直到最终Python耗尽堆栈空间。