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
Perché ricevo questo errore? Sono confuso.
Cosa devi sapere per rispondere alla mia domanda?
socket
è un modulo che contiene la classe socket
.
Dovete fare socket.socket(...)
o 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'>
Notate che l'errore qui è abbastanza facile da capire: se l'oggetto modulo non è richiamabile
, probabilmente state chiamando un oggetto modulo! Cos'è un oggetto modulo? È il tipo di cosa che si ottiene quando si importa un modulo.
Ma anche se non lo capisci (il che va bene, spesso ci si confonde sul fatto che classi, moduli, funzioni ecc. sono tutti oggetti come tutto il resto), c'è un modo abbastanza facile per iniziare il debugging:
l'oggetto modulo non è richiamabile
. Questo suona come se stessi cercando di chiamare qualcosa che non si può chiamare. Mi chiedo cosa sto cercando di chiamare?socket
. Dovrebbe essere richiamabile! Mi chiedo se la variabile socket
è quello che penso che sia?print socket
.Sembra che tu abbia importato il modulo socket
come import socket
. Quindi socket
è il modulo. Devi cambiare quella linea in self.serv = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
, così come ogni altro uso del modulo socket
, o cambiare la dichiarazione di importazione in from socket import socket
.
Oppure avete un import socket
dopo il vostro 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
So che questo thread è vecchio di un anno, ma il vero problema è nella vostra directory di lavoro.
Credo che la directory di lavoro sia C:\Users\Administrator\Documents\Mibot\oops
. Per favore controlla il file chiamato socket.py
in questa directory. Una volta trovato, rinominalo o spostalo. Quando importi socket, viene usato socket.py
dalla directory corrente invece di socket.py
dalla directory di Python. Spero che questo sia stato d'aiuto :)
Nota: Non usare mai i nomi dei file della directory di Python per salvare il nome dei file del tuo programma; andrà in conflitto con il tuo programma.