TypeError: el objeto 'módulo' no se puede invocar
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.
¿Cómo puedo solucionar este error?
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'>
Esto es lo que significa el mensaje de error:
dice module object is not callable
, porque su código está llamando a un objeto de módulo . Un objeto de módulo es el tipo de cosa que obtienes cuando importas un módulo. Lo que intentaba hacer es llamar a un objeto de clase dentro del objeto del módulo que tiene el mismo nombre que el módulo que lo contiene.
Aquí hay una manera de analizar lógicamente este tipo de error:
- "
module object is not callable
. Python me dice que mi código intenta llamar a algo que no se puede llamar. ¿A qué intenta llamar mi código?" - "El código está intentando invocar
socket
. ¡Eso debería ser invocable! ¿La variablesocket
es lo que creo que es? - Debería imprimir qué enchufe es y comprobarlo.
print(socket)
Supongamos que el contenido de YourClass.py es:
class YourClass:
# ......
Si utiliza:
from YourClassParentDir import YourClass # means YourClass.py
De esta manera, obtendrá TypeError: el objeto 'módulo' no se puede llamar si luego intentó llamar YourClass()
.
Pero, si usas:
from YourClassParentDir.YourClass import YourClass # means Class YourClass
o usar YourClass.YourClass()
, funciona.