TypeError: 'module' object is niet opvraagbaar
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
Waarom krijg ik deze foutmelding? Ik ben in de war.
Wat moet je weten om mijn vraag te beantwoorden?
483
3
socket
is een module, die de klassesocket
bevat.Je moet
socket.socket(...)
offrom socket import socket
doen:Merk op dat de fout hier vrij gemakkelijk te begrijpen is: als
module object is not calllable
, roep je waarschijnlijk een module object aan! Wat'is een module object? Het'is het soort ding dat je krijgt als je een module importeert.Maar zelfs als je dat niet'begrijpt (wat prima is, het'is vaak verwarrend dat klassen, modules, functies etc allemaal gewoon objecten zijn zoals al het andere), er'is een vrij eenvoudige manier om te beginnen met debuggen:
module object is niet opvraagbaar
. Dat klinkt alsof ik'iets probeer aan te roepen dat je niet kunt aanroepen. Ik vraag me af wat ik probeer aan te roepen? "socket
aan. Dat zou oproepbaar moeten zijn! Ik vraag me af of de variabelesocket
is wat ik denk dat het is?print socket
Het lijkt erop dat je de
socket
module hebt geïmporteerd alsimport socket
. Daarom issocket
de module. Je moet of die regel veranderen inself.serv = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
, net als elk ander gebruik van desocket
module, of het import statement veranderen infrom socket import socket
.Of je hebt een
import socket
na jefrom socket import *
:Ik weet dat deze draad een jaar oud is, maar het echte probleem zit in je werkdirectory.
Ik geloof dat de werkdirectory
C:\Users\Administrator\Documenten\Mibot\oops
is. Kijk of u een bestand met de naamsocket.py
in deze directory kunt vinden. Als u het vindt, hernoem of verplaats het dan. Wanneer je socket importeert, wordtsocket.py
uit de huidige directory gebruikt in plaats vansocket.py
uit de directory van Python's. Hopelijk heeft dit geholpen :)Note: Gebruik nooit de bestandsnamen uit Python's directory om de bestandsnaam van je programma's op te slaan; het zal conflicteren met je programma('s).