TypeError: el objeto 'módulo' no se puede invocar

Resuelto user551717 asked hace 13 años • 0 respuestas
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?

user551717 avatar Dec 26 '10 22:12 user551717
Aceptado

socketes 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 variable socketes lo que creo que es?
  • Debería imprimir qué enchufe es y comprobarlo.print(socket)
Katriel avatar Dec 26 '2010 15:12 Katriel

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.

Bowen Xu avatar Feb 22 '2017 07:02 Bowen Xu