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'>
请注意,这里的错误很容易理解:如果`模块对象不可调用',你可能正在调用一个模块对象!什么是模块对象?就是你导入一个模块时得到的那种东西。
但是,即使你不理解(这也没关系,类、模块、函数等都只是像其他东西一样的对象,这常常令人困惑),也有一个非常简单的方法来开始调试。
模块对象不可调用
。这听起来像是我在试图调用一些你不能调用的东西。我想知道我在试图调用什么?socket
。这应该是可调用的!我想知道变量socket
是否是我认为的那样?print socket
。看起来你所做的是把socket
模块导入为import socket
。因此,socket'是该模块。你需要将这一行改为
self.serv = socket.socket(socket.AF_INET, socket.SOCK_STREAM),以及其他所有对
socket模块的使用,或者将导入语句改为
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
我知道这个话题已经有一年了,但真正的问题在你的工作目录中。
我认为工作目录是C:\Users\Administrator\Documents\Mibot\oops\
。请检查这个目录中是否有名为socket.py
的文件。一旦你找到它,重命名或移动它。当你导入socket时,会使用当前目录下的socket.py
,而不是Python'目录下的socket.py
。希望这对你有帮助 :)
注意:千万不要使用Python'目录中的文件名来保存你的程序的文件名;它将与你的程序冲突。