File "C:\Users\Administrator\Documents\Mibot\oops\blinkserv.py", line 82, in __init__
self.serv = socket(AF_INET,SOCK_STREAM)
TypeError: 'module' object is not callable
なぜこのようなエラーが出るのでしょうか? 混乱しています。
私の質問に答えるには何が必要なのでしょうか?
socket
は、クラス socket
を含むモジュールです。
socket.socket(...)またはfrom socket import socketを実行する必要があります。
>>> import socket
>>> socket
<module 'socket' from 'C:\Python27\lib\socket.pyc'>
>>> socket.socket
<class 'socket._socketobject'>
>>>
>>> from socket import socket
>>> socket
<class 'socket._socketobject'>
ここでのエラーは非常に理解しやすいことに注意してください: module object is not callable
の場合、おそらくモジュールオブジェクトを呼び出しているのでしょう!モジュールオブジェクトとは何でしょうか?それは、モジュールをインポートしたときに得られるタイプのものです。
しかし、たとえそれが理解できなくても(それは構いません。クラス、モジュール、関数などが他のものと同様に単なるオブジェクトであることはしばしば混乱を招きます)、デバッグを始めるためのとても簡単な方法があります。
module object is not callable
ですね。これは、呼べないものを呼ぼうとしているように聞こえます。何を呼ぼうとしているのかな?socket
を呼び出しています。これは呼び出し可能なはずです。変数socket
が思った通りのものかどうかは疑問です。print socket
(ソケット)あなたがしたことは、socket
モジュールをimport socket
としてインポートしたことのようです。そのため、socket
がモジュールとなっています。この行を self.serv = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
に変更するか、socket
モジュールの他のすべての使用方法と同様に、import 文を from socket import socket
に変更する必要があります。
あるいは、from socket import *
の後にimport socket
をつけている場合もあります。
>>> from socket import *
>>> serv = socket(AF_INET,SOCK_STREAM)
>>> import socket
>>> serv = socket(AF_INET,SOCK_STREAM)
Traceback (most recent call last):
File "<input>", line 1, in <module>
TypeError: 'module' object is not callable
このスレッドが1年前のものであることは承知していますが、本当の問題はあなたの作業ディレクトリにあります。
C:Users%Administrator%Documents%Mibot%oops%が作業ディレクトリだと思います。このディレクトリの中に、
socket.pyというファイルがあるかどうかを確認してください。ファイルが見つかったら、名前を変更するか、移動してください。ソケットをインポートする際には、Python'のディレクトリにある
socket.pyではなく、カレントディレクトリにある
socket.py`が使用されます。お役に立てれば幸いです。)
注意: Pythonのディレクトリにあるファイル名を自分のプログラムのファイル名に使ってはいけません。