HOWTO · Python

Resolver TypeError: el objeto del módulo no se puede llamar en Python

Este tutorial demuestra qué significa Python TypeError: module object not callable, su causa y las formas de resolver este error.

Cada lenguaje de programación encuentra muchos errores. Algunos ocurren en tiempo de compilación, otros en tiempo de ejecución.

Este artículo discutirá el TypeError: el objeto 'módulo' no se puede llamar. Este error surge cuando la clase/método y el módulo tienen los mismos nombres; nos confundimos entre ellos debido a los mismos nombres.

Cuando importamos un módulo, no un método, llamar a ese módulo dará el error porque el módulo no se puede llamar. Solo podemos llamar al método.

Causa del TypeError: el objeto 'módulo' no se puede llamar en Python

Importaremos un módulo incorporado, socket, en el siguiente código. Este módulo contiene además una clase llamada socket().

Aquí, el nombre del método y el nombre de la clase son los mismos. Si solo importamos el socket y lo llamamos, el intérprete arrojará un Error de tipo: el objeto 'módulo' no se puede llamar.

Código de ejemplo:

# Python 3.x
import socket

socket()

Producción :

#Python 3.x
Traceback (most recent call last):
  File "<string>", line 2, in <module>
TypeError: 'module' object is not callable

También podemos enfrentarnos a este error en el caso de módulos personalizados que definimos nosotros mismos. Hemos creado el siguiente código y lo hemos guardado en un archivo llamado infomodule.py.

Código de ejemplo:

# Python 3.x
def infomodule():
    info = "meeting at 10:00 am."
    print(info)

Luego creamos otro archivo de Python y escribimos el siguiente código, llamando al módulo infomodule.py. Obtendremos el Error de tipo: el objeto 'módulo' no se puede llamar.

Código de ejemplo:

# Python 3.x
import infomodule

Print(infomodule())

Producción :

#Python 3.x
Traceback (most recent call last):
File "mycode.py", line 3, in <module>
 print(infomodule())
TypeError: 'module' object is not callable

Resuelva el TypeError: el objeto 'módulo' no se puede llamar en Python

Llame al método/clase desde el módulo

Para corregir este error, podemos importar la clase desde el módulo en lugar de importar el módulo directamente. Arreglará el TypeError: el objeto del módulo no se puede llamar.

Aquí, creamos con éxito un objeto de la clase socket.

Código de ejemplo:

# Python 3.x
import socket

socket.socket()

Producción :

<socket.socket fd=876, family=AddressFamily.AF_INET, type=SocketKind.SOCK_STREAM, proto=0>

En el caso del módulo personalizado, podemos corregir el error de manera similar. Aquí, hemos llamado al método infomodule() del módulo infomodule.

Código de ejemplo:

import infomodule

print(infomodule.infomodule())

Producción :

meeting at 10:00 am.

Importar el método/clase desde el módulo

Otra forma de corregir este error es importar la clase del módulo y crear su objeto.

Aquí, importamos la clase socket del módulo socket y creamos su objeto.

Código de ejemplo:

# Python 3.x
from socket import socket

socket()

Producción :

<socket.socket fd=876, family=AddressFamily.AF_INET, type=SocketKind.SOCK_STREAM, proto=0>

También seguiremos el mismo procedimiento en el caso de módulos personalizados. Aquí, importamos el método del módulo y lo llamamos.

Código de ejemplo:

# Python 3.x
from infomodule import infomodule

print(infomodule())

Producción :

meeting at 10:00 am.