TypeError:“模块”对象不可调用
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'>
注意这里的错误很容易理解:如果module object is not callable
,那么你可能调用了一个模块对象! 什么是模块对象? 这是您导入模块时获得的types。
但是,即使你不明白(这很好,类,模块,函数等都是类似其他东西的对象),但是启动debugging还是非常简单的:
- “嗯,
module object is not callable
,听起来好像我试图调用一些你不能调用的东西,我想知道我想要调用什么? - “哦,我打电话给
socket
,应该是可以调用的,我想知道是否我认为这是可变socket
? -
print socket
添加到__init__.py
,例如:
from YourClass import YourClass
然后,当您将其导入到另一个脚本中时,您将准备好一个类的实例:
from YourClassParentDir import YourClass
假设YourClass.py的内容是:
Class YourClass: ......
如果你使用:
from YourClassParentDir import YourClass # means YourClass.py
这样,我得到了TypeError:'模块'对象不可调用 。
但是,如果你使用:
from YourClassParentDir.YourClass import YourClass # means Class YourClass
这个对我有用。
这是另外一个问题,在阅读这些post之后,我花了一段时间去看。 我正在设置一个脚本来调用我的python bin脚本。 我得到的模块也无法调用。
我的锯齿是我正在做以下事情:
from mypackage.bin import myscript ... myscript(...)
当我的zag需要做到以下几点:
from mypackage.bin.myscript import myscript ... myscript(...)
总之,仔细检查你的包和模块嵌套。
我正在做的是有一个脚本目录,没有* .py扩展名,仍然有'bin'模块在mypackage /斌,这些有我的* .py扩展名。 我是包装新手,在我解释他们的时候试图遵循标准。 所以,我有安装根:
setup.py scripts/ script1 mypackage/ bin/ script1.py subpackage1/ subpackage_etc/
如果这不符合标准,请让我知道。
看来你已经做了导入socket
模块作为import socket
。 所以socket
是模块。 您可能需要将该行更改为self.serv = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
以及socket
模块的其他所有用法,或将import语句from socket import socket
更改为。
或者你from socket import *
后有一个import socket
from socket import *
:
>>> 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
我知道这个线程已经有一年了,但真正的问题在于你的工作目录。
我相信工作目录是C:\Users\Administrator\Documents\Mibot\oops\
。 请检查此目录中名为socket.py
的文件。 一旦find它,重命名或移动它。 在导入套接字时,使用当前目录下的socket.py
来代替Python目录下的socket.py
。 希望这有助于。 🙂
注意:切勿使用Python目录中的文件名来保存程序的文件名; 它将与您的程序发生冲突。
解决这个问题的简单方法是导出PYTHONPATH
variables环境。 例如,对于Debian / GNU Linux中的Python 2.6:
export PYTHONPATH=/usr/lib/python2.6`
在其他操作系统中,您首先会find此模块或socket.py
文件的位置。
在setup.py中configurationconsole_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__':
块,这似乎没有什么区别。 这不会使模块可调用。