2011-01-26 78 views
2

我开始学习这个asyncore.dispatcher模块,当我运行第一个示例程序时,它给出了下面的错误。asyncore.dispatcher python模块错误

Python版本2.6

asyncore模块安装也有其内部调度类。可能是什么问题!

错误:

AttributeError: 'module' object has no attribute 'dispatcher' 

示例代码:

import asyncore, socket 

class HTTPClient(asyncore.dispatcher): 

    def __init__(self, host, path): 
     asyncore.dispatcher.__init__(self) 
     self.create_socket(socket.AF_INET, socket.SOCK_STREAM) 
     self.connect((host, 80)) 
     self.buffer = 'GET %s HTTP/1.0\r\n\r\n' % path 

    def handle_connect(self): 
     pass 

    def handle_close(self): 
     self.close() 

    def handle_read(self): 
     print self.recv(8192) 

    def writable(self): 
     return (len(self.buffer) > 0) 

    def handle_write(self): 
     sent = self.send(self.buffer) 
     self.buffer = self.buffer[sent:] 

client = HTTPClient('www.python.org', '/') 
asyncore.loop() 
+0

错误发生在哪条线上?我们可以得到完整的追溯? – aaronasterling 2011-01-26 05:50:00

回答

6

你的问题是,你命名你的文件asyncore.py。它在python标准库中隐藏asyncore.py,所以文件导入自己而不是真正的。您想要重命名您的文件副本,并在同一个目录中删除asyncore.pyc(如果存在)。然后当你运行你的文件时,你将从标准库导入asyncore.py

当Python运行行import asyncore时,python通过sys.path中的目录查找名为asyncore.py的文件。正在执行的主文件的目录始终是其中的第一个条目。所以Python找到你的文件并尝试导入它。作为一般规则,如果您想使用该模块,则绝对不应该为您的文件提供与标准库中的模块相同的名称。