2011-01-26 5 views
2

私はこのasyncore.dispatcherモジュールを学び始めました。最初のサンプルプログラムを実行すると、以下のエラーが出ます。asyncore.dispatcher python module error

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

+0

フルトレースバックをお願いします。 –

+0

トレースバック(最新の呼び出しの最後): ":\ pythonの\ asyncore.py C"、3行目、 クラスでのHTTPClient(asyncore 輸入asyncore、ソケット ファイルで ファイル "asyncore.py"、ライン1、 .dispatcher): AttributeError: 'module'オブジェクトには属性 'dispatcher'がありません。 –

答えて

6

あなたの問題は、あなたのファイルasyncore.pyの名前ということです。 asyncore.pyをPythonの標準ライブラリでシャドーイングしているので、ファイルは実際のものではなく自分自身をインポートしています。ファイルの名前を変更し、同じディレクトリにあるasyncore.pycを削除したい場合その後、ファイルを実行すると、asyncore.pyを標準ライブラリからインポートします。

Pythonはラインimport asyncoreを実行すると、Pythonはasyncore.pyという名前のファイルをsys.pathでディレクトリを検索します。実行中のプライマリファイルのディレクトリは、常にその中の最初のエントリです。そこで、Pythonはあなたのファイルを見つけ、それをインポートしようとします。一般的なルールとして、そのモジュールを使用する場合は、標準ライブラリのモジュールと同じ名前をファイルに与えるべきではありません。