Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/330.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 类型错误:';模块';对象不可调用_Python_Sockets - Fatal编程技术网

Python 类型错误:';模块';对象不可调用

Python 类型错误:';模块';对象不可调用,python,sockets,Python,Sockets,为什么我会犯这个错误? 我很困惑 回答我的问题需要知道什么?socket是一个模块,包含类socket 您需要从套接字导入套接字执行socket.socket(…)或: 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 c

为什么我会犯这个错误? 我很困惑


回答我的问题需要知道什么?

socket
是一个模块,包含类
socket

您需要从套接字导入套接字执行
socket.socket(…)

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
导入套接字 >>>插座 >>>插座 >>> >>>从套接字导入套接字 >>>插座
这就是错误消息的含义:
它说,
模块对象不可调用
,因为您的代码正在调用模块对象。模块对象是导入模块时得到的对象类型。您试图做的是在模块对象中调用一个类对象,该类对象恰好与包含它的模块同名

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

  • 模块对象不可调用
    。Python告诉我,我的代码试图调用无法调用的东西。我的代码试图调用什么?”
  • “代码正在尝试调用
    socket
    。这应该是可调用的!变量
    socket
    是我认为的吗?”`
  • 我应该打印出套接字是什么,然后检查
    print socket

您所做的似乎是将
socket
模块导入为
import socket
。因此
socket
就是模块。您需要将该行更改为
self.serv=socket.socket(socket.AF\u INET,socket.SOCK\u STREAM)
,以及每隔一次使用
套接字
模块,或将导入语句从套接字导入套接字更改为

或者,在套接字导入的
之后有一个
导入套接字

>>> import socket
>>> socket
<module 'socket' from 'C:\Python27\lib\socket.pyc'>
>>> socket.socket
<class 'socket._socketobject'>
>>>
>>> from socket import socket
>>> socket
<class 'socket._socketobject'>
来自套接字导入的
>>*
>>>serv=套接字(自动网络、套接字流)
>>>导入套接字
>>>serv=套接字(自动网络、套接字流)
回溯(最近一次呼叫最后一次):
文件“”,第1行,在
TypeError:“模块”对象不可调用

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

我相信工作目录是
C:\Users\Administrator\Documents\Mibot\oops\
。请检查此目录中名为
socket.py
的文件。找到它后,重命名或移动它。导入socket时,将使用当前目录中的
socket.py
,而不是Python di中的
socket.py
教区长。希望这有帮助。:)


注意:切勿使用Python目录中的文件名保存程序的文件名;这会与程序冲突。

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

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

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

这是另一个问题,即使在阅读了这些文章之后,我也花了一段时间才看到。我正在设置一个脚本来调用python bin脚本。我也无法调用该模块

我的想法是我在做以下事情:

export PYTHONPATH=/usr/lib/python2.6`
当我的zag需要执行以下操作时:

from mypackage.bin import myscript
...
myscript(...)
总之,请仔细检查包和模块嵌套

我试图做的是创建一个没有*.py扩展名的脚本目录,并且在mypackage/bin中仍然有“bin”模块,这些模块有我的*.py扩展名。我是打包新手,尝试在解释这些标准时遵循这些标准。因此,我在安装根目录中:

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

如果这不符合标准,请告诉我。

添加到您的ClassParentDir中的主
\uu init\uuuuuuuuuuy.py
,例如:

setup.py
scripts/
      script1
mypackage/
   bin/
      script1.py
   subpackage1/
   subpackage_etc/
然后,当您将类的实例导入到另一个脚本中时,它将准备就绪:

from .YourClass import YourClass

假设YourClass.py的内容是:

from YourClassParentDir import YourClass
如果您使用:

class YourClass:
    # ......
from YourClassParentDir import YourClass  # means YourClass.py
这样,如果您尝试调用
YourClass()
,您将得到TypeError:“module”对象不可调用

但是,如果您使用:

class YourClass:
    # ......
from YourClassParentDir import YourClass  # means YourClass.py

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

在setup.py中配置控制台脚本入口点时,当端点是模块或包而不是模块中的函数时,我发现存在此问题

from YourClassParentDir.YourClass import YourClass   # means Class YourClass
应该是

from setuptools import setup
setup (
# ...
    entry_points = {
        'console_scripts': [mycli=package.module.submodule]
    },
# ...
)

因此,它将引用一个可调用的函数而不是模块本身。如果模块有一个
if uuu name uuu=='\uuu main uu':
块,这似乎没有什么区别。这将不会使模块可调用。

我猜您已经通过设置全局变量“module”覆盖了内置函数/变量或其他“module”“。只需打印模块,查看其中的内容。

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

简短回答:您将文件/目录作为函数而不是实际函数调用。

请继续阅读:

当您将模块作为函数导入并调用它时,就会发生这种错误。 因此,python模块中有一个.py文件。包(目录)也可以视为模块。 假设我有一个create.py文件。在该文件中,我有一个如下函数:

from setuptools import setup
setup (
# ...
    entry_points = {
        'console_scripts': [mycli=package.module.submodule:main]
    },
# ...
)
#inside create.py
def create():
  pass
现在,在另一个代码文件中,如果我这样做:

from setuptools import setup
setup (
# ...
    entry_points = {
        'console_scripts': [mycli=package.module.submodule:main]
    },
# ...
)
#inside create.py
def create():
  pass
当我将create.py文件作为函数调用时,会出现此错误。 所以我必须这样做:

#inside main.py file
import create
create() #here create refers to create.py , so create.create() would work here

希望有帮助!快乐编码

我也面临同样的问题。然后我试着不使用
从YourClass导入YourClass


我刚刚复制了YourClass.py的全部代码,并在主代码(或当前代码)上运行它。它解决了错误

我已将套接字导入为:从套接字导入*我可以更改它,但这需要一段时间,所以我不愿意。@user您可能稍后在某个地方得到了一个
导入套接字
,它将导入模块
socket
,覆盖类
socket
。请参见编辑中的代码段。@用户:您应该