TypeError: 'module' object is not callable

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

>>> socket.socket

>>>
>>> from socket import socket
>>> socket

请注意,这里的错误很容易理解:如果`模块对象不可调用',你可能正在调用一个模块对象!什么是模块对象?就是你导入一个模块时得到的那种东西。

但是,即使你不理解(这也没关系,类、模块、函数等都只是像其他东西一样的对象,这常常令人困惑),也有一个非常简单的方法来开始调试。

  • "嗯,模块对象不可调用。这听起来像是我在试图调用一些你不能调用的东西。我想知道我在试图调用什么?
  • "哦,我正在调用socket。这应该是可调用的!我想知道变量socket是否是我认为的那样?
  • print socket
评论(8)

看起来你所做的是把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 
TypeError: 'module' object is not callable
评论(4)

我知道这个话题已经有一年了,但真正的问题在你的工作目录中。

我认为工作目录是C:\Users\Administrator\Documents\Mibot\oops\。请检查这个目录中是否有名为socket.py的文件。一旦你找到它,重命名或移动它。当你导入socket时,会使用当前目录下的socket.py,而不是Python'目录下的socket.py。希望这对你有帮助 :)

注意:千万不要使用Python'目录中的文件名来保存你的程序的文件名;它将与你的程序冲突。

评论(1)