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'>

下面是错误信息的含义: 它说模块对象是不可调用的,因为你的代码正在调用一个模块对象。模块对象是导入模块时获得的对象类型。您要做的是在模块对象中调用恰好与包含它的模块具有相同名称的类对象。

下面是一种逻辑上分解这类错误的方法:

"模块对象不可调用。Python告诉我,我的代码试图调用一些不能调用的东西。我的代码要调用什么?” "代码正在尝试调用套接字。这应该是可调用的!变量socket是我想的那样吗?` 我应该打印出socket,然后检查print(socket)

其他回答

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'>

下面是错误信息的含义: 它说模块对象是不可调用的,因为你的代码正在调用一个模块对象。模块对象是导入模块时获得的对象类型。您要做的是在模块对象中调用恰好与包含它的模块具有相同名称的类对象。

下面是一种逻辑上分解这类错误的方法:

"模块对象不可调用。Python告诉我,我的代码试图调用一些不能调用的东西。我的代码要调用什么?” "代码正在尝试调用套接字。这应该是可调用的!变量socket是我想的那样吗?` 我应该打印出socket,然后检查print(socket)

这是另一个陷阱,即使在阅读这些帖子之后,我也花了一段时间才看到。我正在设置一个脚本来调用我的python bin脚本。我也得到了不可调用的模块。

我的zig是我正在做以下事情:

from mypackage.bin import myscript
...
myscript(...)

当我的zag需要做以下事情:

from mypackage.bin.myscript import myscript
...
myscript(...)

总之,仔细检查您的包和模块嵌套。

我想做的是有一个脚本目录,没有*.py扩展名,仍然有'bin'模块在mypackage/bin和这些有我的*.py扩展名。我是包装的新手,并试图遵循标准,因为我解释他们。所以,我在安装根目录下有:

setup.py
scripts/
      script1
mypackage/
   bin/
      script1.py
   subpackage1/
   subpackage_etc/

如果不符合标准,请让我知道。

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

在YourClassParentDir中添加到主__init__.py,例如:

from .YourClass import YourClass

然后,当你将你的类实例导入到另一个脚本时,你将有一个就绪的类实例:

from YourClassParentDir import YourClass

我知道这个线程已经有一年了,但真正的问题在您的工作目录中。

我相信工作目录是C:\Users\Administrator\Documents\Mibot\oops\。请在这个目录下检查名为socket.py的文件。一旦你找到它,重命名或移动它。导入socket时,使用当前目录中的socket.py,而不是Python目录中的socket.py。希望这对你有所帮助。:)

注意:永远不要使用Python目录中的文件名来保存程序的文件名;它将与您的程序发生冲突。