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
为什么我得到这个错误? 我困惑。
如何解决这个错误?
当前回答
在YourClassParentDir中添加到主__init__.py,例如:
from .YourClass import YourClass
然后,当你将你的类实例导入到另一个脚本时,你将有一个就绪的类实例:
from YourClassParentDir import YourClass
其他回答
您使用了模块的名称而不是类的名称 使用
import socket
然后
socket.socket(...)
这是一个奇怪的模块,但你也可以使用类似的东西
import socket as sock
然后使用
sock.socket(...)
假设YourClass.py的内容是:
class YourClass:
# ......
如果你使用:
from YourClassParentDir import YourClass # means YourClass.py
通过这种方式,如果你尝试调用YourClass(),你将得到TypeError: 'module'对象不可调用。
但是,如果你用:
from YourClassParentDir.YourClass import YourClass # means Class YourClass
或者使用YourClass.YourClass(),它可以工作。
检查导入语句,因为模块是不可调用的。 在Python中,所有东西(包括函数、方法、模块、类等)都是对象。
这里有一个可能的额外边缘情况,我偶然发现并困惑了一段时间,希望它能帮助到一些人:
在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
看起来你所做的是导入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