TypeError: 'module' object is not callable
1 2 3 | 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 |
为什么我会得到这个错误?我搞糊涂了。
你需要知道什么才能回答我的问题?
您需要执行
1 2 3 4 5 6 7 8 9 | >>> 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 。听上去我在试着打一些你打不到的电话。我想知道我想打什么电话?" - "哦,我打电话给
socket 。那应该可以叫!我想知道变量socket 是否是我所认为的?` print socket
假设yourclass.py的内容是:
1 2 | class YourClass: # ...... |
如果使用:
1 | from YourClassParentDir import YourClass # means YourClass.py |
这样,我得到了typeerror:如果您试图使用
但是,如果您使用:
1 | from YourClassParentDir.YourClass import YourClass # means Class YourClass |
或者用
添加到您的basparentdir中的主
1 | from .YourClass import YourClass |
然后,当您将类的一个实例导入到另一个脚本中时,您就可以准备好它了:
1 | from YourClassParentDir import YourClass |
这是另一个发现,我花了一段时间看了这些文章。我正在设置一个脚本来调用我的python bin脚本。我得到的模块也不可调用。
我的意思是我在做以下事情:
1 2 3 | from mypackage.bin import myscript ... myscript(...) |
当我的Zag需要执行以下操作时:
1 2 3 | from mypackage.bin.myscript import myscript ... myscript(...) |
总之,请仔细检查包和模块嵌套。
我要做的是拥有一个没有扩展名为*.py的脚本目录,并且仍然有'bin'模块在mypackage/bin中,这些模块有我的扩展名为*.py。我对包装还不熟悉,在解释标准时,我会努力遵循这些标准。所以,我在安装根目录下有:
1 2 3 4 5 6 7 8 | setup.py scripts/ script1 mypackage/ bin/ script1.py subpackage1/ subpackage_etc/ |
如果这不符合标准,请告诉我。
您所做的似乎是将
或者在你的
1 2 3 4 5 6 7 | >>> 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 |
我知道这个线程已经有一年了,但真正的问题是在您的工作目录中。
我相信工作目录是
注意:不要使用python目录中的文件名来保存程序的文件名;它将与您的程序冲突。
我想您已经通过设置全局变量"module"覆盖了内置函数/变量或其他"module"。只需打印模块即可查看其中的内容。
在setup.py中配置控制台脚本入口点时,我发现当端点是模块或包而不是模块中的函数时,存在此问题。
1 2 3 4 | 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 |
例如
1 2 3 4 5 6 7 8 | from setuptools import setup setup ( # ... entry_points = { 'console_scripts': [mycli=package.module.submodule] }, # ... ) |
应该是
1 2 3 4 5 6 7 8 | from setuptools import setup setup ( # ... entry_points = { 'console_scripts': [mycli=package.module.submodule:main] }, # ... ) |
这样它将引用可调用函数而不是模块本身。如果模块有一个
解决这个问题的一个简单方法是导出the
1 | export PYTHONPATH=/usr/lib/python2.6` |
在其他操作系统中,您首先会找到这个模块或