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
Run Code Online (Sandbox Code Playgroud)
为什么我收到此错误?我糊涂了.
你需要知道什么来回答我的问题?
Kat*_*iel 512
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'>
Run Code Online (Sandbox Code Playgroud)
请注意,这里的错误很容易理解:如果module object is not callable,您可能正在调用模块对象!什么是模块对象?这是导入模块时获得的类型.
但是,即使你不理解(这很好,它常常令人困惑的是类,模块,函数等都只是像其他一样的对象),有一种非常简单的方法来开始调试:
module object is not callable这听起来像是在试着打电话给你打不开的东西.我想知道我打算打电话给谁?"socket.那应该是可以调用的!我想知道变量socket是否是我认为的变量?"print socketBra*_*rad 147
假设YourClass.py的内容是:
class YourClass:
# ......
Run Code Online (Sandbox Code Playgroud)
如果您使用:
from YourClassParentDir import YourClass # means YourClass.py
Run Code Online (Sandbox Code Playgroud)
通过这种方式,我得到了TypeError:如果你试图使用,那么'module'对象是不可调用的YourClass().
但是,如果您使用:
from YourClassParentDir.YourClass import YourClass # means Class YourClass
Run Code Online (Sandbox Code Playgroud)
或使用YourClass.YourClass(),它适合我.
Jos*_*ban 98
添加到__init__.pyYourClassParentDir中的main ,例如:
from .YourClass import YourClass
Run Code Online (Sandbox Code Playgroud)
然后,当您将其导入另一个脚本时,您将准备好类的实例:
from YourClassParentDir import YourClass
Run Code Online (Sandbox Code Playgroud)
Dee*_*and 29
简短回答:您将文件/目录作为函数而不是真正的函数调用
继续阅读:
当您将模块视为函数并调用它时,会发生这种错误。所以在 python 模块中是一个 .py 文件。包(目录)也可以被视为模块。假设我有一个create.py文件。在那个文件中,我有一个这样的功能:
#inside create.py
def create():
pass
Run Code Online (Sandbox Code Playgroud)
现在,如果我这样做,在另一个代码文件中:
#inside main.py file
import create
create() #here create refers to create.py , so create.create() would work here
Run Code Online (Sandbox Code Playgroud)
它在将 create.py 文件作为函数调用时出现此错误。所以我必须这样做:
from create import create
create() #now it works.
Run Code Online (Sandbox Code Playgroud)
希望有帮助!快乐编码!
zer*_*cog 27
这是另一个问题,即使在阅读这些帖子后,我也花了一些时间才看到.我正在设置一个脚本来调用我的python bin脚本.我让模块也无法调用.
我的zig是我做了以下事情:
from mypackage.bin import myscript
...
myscript(...)
Run Code Online (Sandbox Code Playgroud)
当我的zag需要执行以下操作时:
from mypackage.bin.myscript import myscript
...
myscript(...)
Run Code Online (Sandbox Code Playgroud)
总之,仔细检查您的包和模块嵌套.
我想要做的是有一个脚本目录,它没有*.py扩展名,并且仍然有'bin'模块在mypackage/bin中,并且这些模块的扩展名为*.py.我是新来的包装,并且在我解释它们时试图遵循标准.所以,我在设置根目录:
setup.py
scripts/
script1
mypackage/
bin/
script1.py
subpackage1/
subpackage_etc/
Run Code Online (Sandbox Code Playgroud)
如果这不符合标准,请告诉我.
mar*_*cog 21
看起来你所做的就是导入socket模块了import socket.因此socket是模块.您需要将该行更改self.serv = socket.socket(socket.AF_INET, socket.SOCK_STREAM)为socket模块的每个其他用途,或者将import语句更改为from socket import socket.
或者你有一个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
Run Code Online (Sandbox Code Playgroud)
小智 7
我知道这个帖子已经有一年了,但真正的问题出在你的工作目录中.
我相信工作目录是C:\Users\Administrator\Documents\Mibot\oops\.请检查socket.py此目录中指定的文件.找到后,重命名或移动它.导入socket时,socket.py使用当前目录而不是socket.pyPython的目录.希望这有帮助.:)
注意:切勿使用Python目录中的文件名来保存程序的文件名; 它会与你的程序冲突.
| 归档时间: |
|
| 查看次数: |
953852 次 |
| 最近记录: |