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
¿Por qué recibo este error? Estoy confundido.
¿Qué necesita saber para responder a mi pregunta?
socket
es un módulo que contiene la clase socket
.
Necesitas hacer 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'>
Observe que el error aquí es bastante fácil de entender: si module object is not callable
, ¡probablemente está llamando a un objeto módulo! ¿Qué es un objeto módulo? Es el tipo de cosa que obtienes cuando importas un módulo.
Pero incluso si no lo entiendes (lo cual está bien, a menudo es confuso que las clases, los módulos, las funciones, etc., sean sólo objetos como todo lo demás), hay una forma bastante fácil de empezar a depurar:
el objeto módulo no es llamable
. Eso suena como si estuviera intentando llamar a algo que no se puede llamar. Me pregunto a qué estoy tratando de llamar'"socket
. ¡Eso debería ser invocable! Me pregunto si la variable "socket" es lo que creo que es.print socket
Parece que lo que has hecho es importar el módulo socket
como import socket
. Por lo tanto socket
es el módulo. Tienes que cambiar esa línea por self.serv = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
, así como cualquier otro uso del módulo socket
, o cambiar la sentencia import por from socket import socket
.
O tiene un import socket
después de su 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
Sé que este hilo es de hace un año, pero el verdadero problema está en tu directorio de trabajo.
Creo que el directorio de trabajo es C:\NAdministrador\NDocumentos\NMibot\oops\
. Por favor, busque el archivo llamado socket.py
en este directorio. Una vez que lo encuentres, renómbralo o muévelo. Cuando importas socket, se utiliza socket.py
del directorio actual en lugar de socket.py
del directorio de Python's. Espero que esto te haya ayudado :)
Nota: Nunca uses los nombres de archivo del directorio de Python's para guardar el nombre de tu programa's; entrará en conflicto con tu(s) programa(s).