Me aparece el objeto “TypeError: ‘list’ no se puede llamar”. ¿Cómo soluciono este error?

Tengo un script simple:

list = [1, 2, 3, 4, 5] myrange = list(range(1, 10)) for number in list: if number in myrange: print(number, 'is between 1 and 10') 

Sin embargo, cada vez que bash ejecutar mi script, Python genera un error:

 Traceback (most recent call last): File "python", line 2, in  TypeError: 'list' object is not callable 

¿Qué significa este error? ¿Por qué lo estoy consiguiendo? ¿Y cómo puedo arreglarlo?

Antes de que pueda comprender completamente lo que significa el error y cómo resolverlo, es importante entender qué es un nombre incorporado en Python.

¿Qué es un nombre incorporado?

En Python, un nombre incorporado es un nombre que el intérprete de Python ya tiene asignado un valor predefinido . El valor puede ser una función o un objeto de clase . Estos nombres siempre están disponibles de forma predeterminada, sin importar el scope. Algunos de los valores asignados a estos nombres representan tipos fundamentales del lenguaje Python, mientras que otros son simples y útiles.

A partir de la última versión de Python – 3.6.2 – actualmente hay 61 nombres incorporados. Puede encontrar una lista completa de los nombres y cómo deben usarse, en la sección de documentación Funciones incorporadas .

Sin embargo, un punto importante a tener en cuenta es que Python no le impedirá volver a asignar nombres incorporados . Los nombres incorporados no están reservados, y Python permite que se usen también como nombres de variables.

Aquí hay un ejemplo usando el dict incorporado:

 >>> dict = {} >>> dict {} >>> 

Como puede ver, Python nos permitió asignar el nombre del dict , para hacer referencia a un objeto de diccionario .

¿Qué significa que el objeto “TypeError: ‘list’ no se puede llamar” significa?

En pocas palabras, la razón por la que se produce el error es porque volviste a asignar la list nombres incorporados en el script:

 list = [1, 2, 3, 4, 5] 

Cuando hizo esto, sobrescribió el valor predefinido del nombre incorporado . Esto significa que ya no puede usar el valor predefinido de la list , que es un objeto de clase que representa la lista de Python.

Por lo tanto, cuando intentó utilizar la clase de list para crear una nueva lista a partir de un objeto de range :

 myrange = list(range(1, 10)) 

Python levantó un error. La razón por la que el error dice que el objeto “lista no es invocable” es porque, como se dijo anteriormente, la list nombres se refería a un objeto de lista. Así que lo anterior sería el equivalente de hacer:

 [1, 2, 3, 4, 5](range(1, 10)) 

Lo que por supuesto no tiene sentido. No puedes llamar a un objeto de lista.

¿Cómo puedo solucionar el error?

Si recibe un error similar, como el que dice que “un objeto no se puede llamar”, es probable que haya utilizado un nombre incorporado como variable en su código. En este caso, la solución es tan simple como cambiar el nombre de la variable ofensiva. Por ejemplo, para corregir el código anterior, podríamos cambiar el nombre de nuestra variable de list a ints :

 ints = [1, 2, 3, 4, 5] # Rename "list" to "ints" myrange = list(range(1, 10)) for number in ints: # Renamed "list" to "ints" if number in myrange: print(number, 'is between 1 and 10') 

PEP8 , la guía de estilo oficial de Python, incluye muchas recomendaciones sobre nombrar variables.

Este es un error muy común que cometen los usuarios nuevos y antiguos de Python. Por eso es importante evitar siempre el uso de nombres incorporados como variables como str , dict , list , range , etc.

Muchos linters e IDE le avisarán cuando intente utilizar un nombre incorporado como variable. Si comete este error con frecuencia, puede valer la pena invertir su tiempo en uno de estos progtwigs.

No cambié el nombre de un nombre incorporado, pero sigo recibiendo “TypeError: el objeto ‘list’ no se puede llamar”. ¿Lo que da?

Otra causa común del error anterior es intentar indexar una lista usando paréntesis ( () ) en lugar de corchetes ( [] ). Por ejemplo:

 >>> lst = [1, 2] >>> lst(0) Traceback (most recent call last): File "", line 1, in  lst(0) TypeError: 'list' object is not callable 

Para obtener una explicación del problema completo y qué se puede hacer para solucionarlo, consulte TypeError: el objeto ‘list’ no se puede llamar al intentar acceder a una lista .

Has anulado la list métodos incorporados de Python.

 mylist = [1, 2, 3, 4, 5] # just use any other name than `list` 

¡Aquí está el mcve !

 >>> []() Traceback (most recent call last): File "", line 1, in  TypeError: 'list' object is not callable 

Prueba también {}() y ()() . El mensaje TypeError: 'X' object is not callable significa que escribió la expression(some_arguments) donde expression es una instancia del tipo X , y este tipo no admite el uso en una syntax de llamada a función. La mayoría de las veces escribiste esto porque pensabas que la expression era una función o algún otro tipo llamable.