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目录中的文件名来保存程序的文件名; 它将与您的程序发生冲突。

解决这个问题的简单方法是导出PYTHONPATHvariables环境。 例如,对于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__':块,这似乎没有什么区别。 这不会使模块可调用。