类型错误:'模块'对象不可调用
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
我为什么会出现这个错误?我有点困惑。
我该怎么解决这个错误呢?
17 个回答
135
在你的类的父目录下,找到主要的 __init__.py
文件,然后添加一些内容,比如:
from .YourClass import YourClass
这样一来,当你在其他脚本中导入这个类时,就会有一个类的实例可以直接使用了:
from YourClassParentDir import YourClass
341
假设YourClass.py的内容是:
class YourClass:
# ......
如果你使用:
from YourClassParentDir import YourClass # means YourClass.py
这样的话,当你尝试调用YourClass()
时,会出现类型错误:'模块'对象不可调用的错误。
但是,如果你使用:
from YourClassParentDir.YourClass import YourClass # means Class YourClass
或者使用YourClass.YourClass()
,那就可以正常工作了。
810
socket
是一个模块,里面包含了一个叫 socket
的类。
你需要使用 socket.socket(...)
或者 from socket import socket
来使用它:
>>> import socket
>>> socket
<module 'socket' from 'C:\Python27\lib\socket.pyc'>
>>> socket.socket
<class 'socket._socketobject'>
>>>
>>> from socket import socket
>>> socket
<class 'socket._socketobject'>
这个错误信息的意思是:
它说 module object is not callable
,因为你的代码试图调用一个 模块 对象。模块对象是你导入模块时得到的东西。你想做的其实是调用模块里面的一个 类 对象,而这个类的名字恰好和模块的名字是一样的。
下面是一个分析这种错误的逻辑方法:
- "
module object is not callable
。Python 在告诉我我的代码试图调用一个不能被调用的东西。我的代码到底在试图调用什么?" - "代码试图调用
socket
。这应该是可以调用的!变量socket
是我想的那个吗?" - 我应该打印一下 socket 的内容,检查一下
print(socket)