Waarom krijg ik deze foutmelding?
Ik ben in de war.
Wat moet je weten om mijn vraag te beantwoorden?
Antwoord 1, autoriteit 100%
socket
is een module, die de klasse socket
bevat.
Je moet socket.socket(...)
of from socket import socket
doen:
>>> import socket
>>> socket
<module 'socket' from 'C:\Python27\lib\socket.pyc'>
>>> socket.socket
<class 'socket._socketobject'>
>>>
>>> from socket import socket
>>> socket
<class 'socket._socketobject'>
Dit is wat de foutmelding betekent:
Er staat dat module object is not callable
, omdat uw code een module-object aanroept. Een module-object is het soort ding dat u krijgt wanneer u een module importeert. Wat u probeerde te doen, is een klasse-object binnen het module-object aanroepen dat toevallig dezelfde naam heeft als de module die het bevat.
Hier is een manier om dit soort fouten logisch op te splitsen:
- “
module object is not callable
. Python vertelt me dat mijn code iets probeert aan te roepen dat niet kan worden aangeroepen. Wat probeert mijn code aan te roepen?” - “De code probeert
socket
aan te roepen. Dat zou oproepbaar moeten zijn! Is de variabelesocket
wat ik denk dat het is?` - Ik moet uitprinten wat socket is en
print socket
aanvinken
Antwoord 2, autoriteit 34%
Stel dat de inhoud van YourClass.py is:
class YourClass:
# ......
Als je het volgende gebruikt:
from YourClassParentDir import YourClass # means YourClass.py
Op deze manier krijgt u TypeError: ‘module’ object is not callable als u vervolgens YourClass()
probeert aan te roepen.
Maar als u het volgende gebruikt:
from YourClassParentDir.YourClass import YourClass # means Class YourClass
of gebruik YourClass.YourClass()
, het werkt.
Antwoord 3, autoriteit 18%
Toevoegen aan de hoofdmap __init__.py
in YourClassParentDir, bijvoorbeeld:
from .YourClass import YourClass
Vervolgens heb je een exemplaar van je klasse klaar wanneer je het in een ander script importeert:
from YourClassParentDir import YourClass
Antwoord 4, autoriteit 5%
Hier is nog een probleem, het duurde even voordat ik het zag, zelfs na het lezen van deze berichten. Ik was een script aan het opzetten om mijn python bin-scripts aan te roepen. Ik kreeg de module ook niet oproepbaar.
Mijn zig was dat ik het volgende deed:
from mypackage.bin import myscript
...
myscript(...)
wanneer mijn zag het volgende moest doen:
from mypackage.bin.myscript import myscript
...
myscript(...)
Kortom, controleer nogmaals de nesting van uw pakket en module.
Wat ik probeer te doen is om een scriptmap te hebben die niet de *.py extensie heeft, en toch de ‘bin’ modules in mypackage/bin te hebben en deze hebben mijn *.py extensie. Ik ben nieuw in het verpakken en probeer de normen te volgen terwijl ik ze interpreteer. Dus ik heb in de setup root:
setup.py
scripts/
script1
mypackage/
bin/
script1.py
subpackage1/
subpackage_etc/
Als dit niet in overeenstemming is met de norm, laat het me dan weten.
Antwoord 5, autoriteit 4%
Kort antwoord: U roept een bestand/map aan als een functie in plaats van een echte functie
Lees verder:
Dit soort fouten treedt op wanneer u een module importeert die het als een functie denkt en deze aanroept.
Dus in de python-module is een .py-bestand. Pakketten (directories) kunnen ook als modules worden beschouwd.
Laten we zeggen dat ik een create.py-bestand heb. In dat bestand heb ik een functie als deze:
#inside create.py
def create():
pass
Nu, in een ander codebestand als ik het zo doe:
#inside main.py file
import create
create() #here create refers to create.py , so create.create() would work here
Het geeft deze fout omdat ik het bestand create.py als een functie aanroep.
dus ik moet dit doen:
from create import create
create() #now it works.
Hopelijk helpt dat! Veel plezier met coderen!
Antwoord 6, autoriteit 4%
Het lijkt erop dat je de module socket
hebt geïmporteerd als import socket
. Daarom is socket
de module. U moet ofwel die regel wijzigen in self.serv = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
, evenals elk ander gebruik van de socket
-module, of verander het importstatement in from socket import socket
.
Of je hebt een import socket
na je 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
Antwoord 7
Ik weet dat deze thread een jaar oud is, maar het echte probleem zit in je werkmap.
Ik geloof dat de werkmap C:\Users\Administrator\Documents\Mibot\oops\
is. Controleer het bestand met de naam socket.py
in deze map. Zodra je het hebt gevonden, hernoem je het of verplaats je het. Wanneer je socket importeert, wordt socket.py
uit de huidige map gebruikt in plaats van de socket.py
uit de map van Python. Hoop dat dit heeft geholpen. 🙂
Opmerking: Gebruik nooit de bestandsnamen uit de Python-directory om de bestandsnaam van uw programma op te slaan; het zal conflicteren met je programma(‘s).
Antwoord 8
Ik had hetzelfde probleem. toen probeerde ik niet te gebruiken
from YourClass import YourClass
Ik heb zojuist de hele code van YourClass.py gekopieerd en uitgevoerd in de hoofdcode (of huidige code). De fout is opgelost
Antwoord 9
Bij het configureren van een console_scripts-ingangspunt in setup.py ontdekte ik dat dit probleem bestond wanneer het eindpunt een module of pakket was in plaats van een functie binnen de module.
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
Bijvoorbeeld
from setuptools import setup
setup (
# ...
entry_points = {
'console_scripts': [mycli=package.module.submodule]
},
# ...
)
Had moeten zijn
from setuptools import setup
setup (
# ...
entry_points = {
'console_scripts': [mycli=package.module.submodule:main]
},
# ...
)
Zodat het zou verwijzen naar een aanroepbare functie in plaats van naar de module zelf. Het lijkt geen verschil te maken of de module een if __name__ == '__main__':
blok heeft. Hierdoor wordt de module niet oproepbaar.
Antwoord 10
Ik vermoed dat je de ingebouwde functie/variabele of iets anders “module” hebt overschreven door de globale variabele “module” in te stellen. print gewoon de module en kijk wat erin zit.
Antwoord 11
Een eenvoudige manier om dit probleem op te lossen is door de PYTHONPATH
variabele omgeving te exporteren. Bijvoorbeeld voor Python 2.6 in Debian/GNU Linux:
export PYTHONPATH=/usr/lib/python2.6`
In andere besturingssystemen zou u eerst de locatie van deze module of het bestand socket.py
vinden.
Antwoord 12
controleer de import-statements aangezien een module niet kan worden aangeroepen.
In Python is alles (inclusief functies, methoden, modules, klassen enz.) een object.