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

为什么我得到这个错误? 我困惑。

如何解决这个错误?


当前回答

在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__':块,似乎没有什么区别。这将使模块不可调用。

解决这个问题的一个简单方法是导出pythonpath变量环境。例如,对于Debian/GNU Linux中的Python 2.6:

export PYTHONPATH=/usr/lib/python2.6`

在其他操作系统中,您将首先找到该模块或socket.py文件的位置。

检查导入语句,因为模块是不可调用的。 在Python中,所有东西(包括函数、方法、模块、类等)都是对象。

假设YourClass.py的内容是:

class YourClass:
    # ......

如果你使用:

from YourClassParentDir import YourClass  # means YourClass.py

通过这种方式,如果你尝试调用YourClass(),你将得到TypeError: 'module'对象不可调用。

但是,如果你用:

from YourClassParentDir.YourClass import YourClass   # means Class YourClass

或者使用YourClass.YourClass(),它可以工作。

看起来你所做的是导入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