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
为什么我得到这个错误? 我困惑。
如何解决这个错误?
当前回答
当在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__':块,似乎没有什么区别。这将使模块不可调用。
其他回答
假设YourClass.py的内容是:
class YourClass:
# ......
如果你使用:
from YourClassParentDir import YourClass # means YourClass.py
通过这种方式,如果你尝试调用YourClass(),你将得到TypeError: 'module'对象不可调用。
但是,如果你用:
from YourClassParentDir.YourClass import YourClass # means Class YourClass
或者使用YourClass.YourClass(),它可以工作。
您使用了模块的名称而不是类的名称 使用
import socket
然后
socket.socket(...)
这是一个奇怪的模块,但你也可以使用类似的东西
import socket as sock
然后使用
sock.socket(...)
我猜你已经通过设置全局变量“module”覆盖了内置函数/变量或其他“模块”。只需打印模块,看看里面有什么。
在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__':块,似乎没有什么区别。这将使模块不可调用。