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
为什么我得到这个错误? 我困惑。
如何解决这个错误?
当前回答
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)
其他回答
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)
看起来你所做的是导入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
在YourClassParentDir中添加到主__init__.py,例如:
from .YourClass import YourClass
然后,当你将你的类实例导入到另一个脚本时,你将有一个就绪的类实例:
from YourClassParentDir import YourClass
当在setup.py中配置console_scripts入口点时,我发现当端点是模块或包而不是模块中的函数时存在这个问题。
Traceback (most recent call last):
File "/Users/ubuntu/.virtualenvs/virtualenv/bin/mycli", line 11, in <module>
load_entry_point('my-package', 'console_scripts', 'mycli')()
TypeError: 'module' object is not callable
例如
from setuptools import setup
setup (
# ...
entry_points = {
'console_scripts': [mycli=package.module.submodule]
},
# ...
)
应该是
from setuptools import setup
setup (
# ...
entry_points = {
'console_scripts': [mycli=package.module.submodule:main]
},
# ...
)
因此,它将引用一个可调用的函数,而不是模块本身。如果模块有一个if __name__ == '__main__':块,似乎没有什么区别。这将使模块不可调用。
检查导入语句,因为模块是不可调用的。 在Python中,所有东西(包括函数、方法、模块、类等)都是对象。