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

为什么我得到这个错误? 我困惑。

如何解决这个错误?


当前回答

您使用了模块的名称而不是类的名称 使用

import socket

然后

socket.socket(...)

这是一个奇怪的模块,但你也可以使用类似的东西

import socket as sock

然后使用

sock.socket(...)

其他回答

看起来你所做的是导入socket模块作为import socket。因此socket就是模块。你需要把这一行改成self。Serv = socket.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

我也面临同样的问题。然后我试着不吸 导入你的类

我只是复制了YourClass.py的整个代码,并在主代码(或当前代码)上运行它。它解决了错误

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

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

注意:永远不要使用Python目录中的文件名来保存程序的文件名;它将与您的程序发生冲突。

在YourClassParentDir中添加到主__init__.py,例如:

from .YourClass import YourClass

然后,当你将你的类实例导入到另一个脚本时,你将有一个就绪的类实例:

from YourClassParentDir import YourClass

解决这个问题的一个简单方法是导出pythonpath变量环境。例如,对于Debian/GNU Linux中的Python 2.6:

export PYTHONPATH=/usr/lib/python2.6`

在其他操作系统中,您将首先找到该模块或socket.py文件的位置。