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的内容是:
class YourClass:
# ......
如果你使用:
from YourClassParentDir import YourClass # means YourClass.py
通过这种方式,如果你尝试调用YourClass(),你将得到TypeError: 'module'对象不可调用。
但是,如果你用:
from YourClassParentDir.YourClass import YourClass # means Class YourClass
或者使用YourClass.YourClass(),它可以工作。
其他回答
简单回答:您将文件/目录作为函数调用,而不是真正的函数
读:
这种错误发生在导入模块时,将其视为函数并调用它。 所以在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.
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'>
下面是错误信息的含义: 它说模块对象是不可调用的,因为你的代码正在调用一个模块对象。模块对象是导入模块时获得的对象类型。您要做的是在模块对象中调用恰好与包含它的模块具有相同名称的类对象。
下面是一种逻辑上分解这类错误的方法:
"模块对象不可调用。Python告诉我,我的代码试图调用一些不能调用的东西。我的代码要调用什么?” "代码正在尝试调用套接字。这应该是可调用的!变量socket是我想的那样吗?` 我应该打印出socket,然后检查print(socket)
检查导入语句,因为模块是不可调用的。 在Python中,所有东西(包括函数、方法、模块、类等)都是对象。
我猜你已经通过设置全局变量“module”覆盖了内置函数/变量或其他“模块”。只需打印模块,看看里面有什么。
解决这个问题的一个简单方法是导出pythonpath变量环境。例如,对于Debian/GNU Linux中的Python 2.6:
export PYTHONPATH=/usr/lib/python2.6`
在其他操作系统中,您将首先找到该模块或socket.py文件的位置。