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

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

如何解决这个错误?


当前回答

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

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

其他回答

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

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

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

我猜你已经通过设置全局变量“module”覆盖了内置函数/变量或其他“模块”。只需打印模块,看看里面有什么。

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

import socket

然后

socket.socket(...)

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

import socket as sock

然后使用

sock.socket(...)

这里有一个可能的额外边缘情况,我偶然发现并困惑了一段时间,希望它能帮助到一些人:

在some_module / a.py:

def a():
   pass

在some_module / b.py:

from . import a

def b():
   a()

在some_module / __init__ . py:

from .b import b
from .a import a

main.py:

from some_module import b

b()

然后,因为当main.py加载b时,它会通过__init__.py,它会在a.py之前尝试加载b.py。这意味着当b.py尝试加载一个对象时,它得到的是模块而不是函数——这意味着你将得到错误消息:模块对象不可调用

这里的解决方案是交换some_module/__init__.py中的顺序:

from .a import a
from .b import b

或者,如果这将创建一个循环依赖,请更改您的文件名,使其与函数不匹配,并直接从文件加载,而不是依赖__init__.py

简单回答:您将文件/目录作为函数调用,而不是真正的函数

读:

这种错误发生在导入模块时,将其视为函数并调用它。 所以在python模块中是一个。py文件。包(目录)也可以看作是模块。 假设我有一个create。py文件。在这个文件中,我有一个这样的函数:

#inside create.py
def create():
  pass

现在,在另一个代码文件中,如果我这样做:

#inside main.py file
import create
create() #here create refers to create.py , so create.create() would work here

当我将create.py文件作为函数调用时,它会给出这个错误。 所以我得这么做

from create import create
create() #now it works.