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
为什么我得到这个错误? 我困惑。
如何解决这个错误?
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.