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
Pourquoi est-ce que je reçois cette erreur ? Je suis confus.
Que devez-vous savoir pour répondre à ma question ?
socket
est un module, contenant la classe socket
.
Vous devez faire socket.socket(...)
ou 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'>
Remarquez que l'erreur ici est assez facile à comprendre : si module object is not callable
, vous appelez probablement un objet module ! Qu'est-ce qu'un objet module ? C'est le type de chose que vous obtenez lorsque vous importez un module.
Mais même si vous ne comprenez pas cela (ce qui n'est pas grave, il est souvent difficile de comprendre que les classes, les modules, les fonctions, etc. ne sont que des objets comme les autres), il existe un moyen assez simple de commencer à déboguer :
module object is not callable
. On dirait que j'essaie d'appeler quelque chose que l'on ne peut pas appeler. Je me demande ce que j'essaie d’appeler ?" ;socket
. Elle devrait être appelable ! Je me demande si la variable socket
est bien celle à laquelle je pense?``print socket
Il semble que vous ayez importé le module socket
comme import socket
. Par conséquent, socket
est le module. Vous devez soit changer cette ligne en self.serv = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
, ainsi que toute autre utilisation du module socket
, soit changer la déclaration d'importation en from socket import socket
.
Ou bien vous avez un import socket
après votre 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
Je sais que ce sujet date d'un an, mais le vrai problème se trouve dans votre répertoire de travail.
Je pense que le répertoire de travail est C:\Users\Administrator\Documents\Mibot\oops\
. Veuillez vérifier si le fichier nommé socket.py
se trouve dans ce répertoire. Une fois que vous l'avez trouvé, renommez-le ou déplacez-le. Lorsque vous importez socket, le fichier socket.py
du répertoire actuel est utilisé à la place du fichier socket.py
du répertoire Python's. J'espère que cela vous a aidé :)
Note: N'utilisez jamais les noms de fichiers du répertoire de Python pour enregistrer le nom de fichier de votre programme ; cela entrerait en conflit avec votre ou vos programmes.