python typeerror

python - Me aparece "TypeError: el objeto ''list'' no es invocable". ¿Cómo soluciono este error?



(2)

Antes de que pueda comprender completamente qué significa el error y cómo resolverlo, es importante comprender 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 ha 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 alcance. Algunos de los valores asignados a estos nombres representan tipos fundamentales del lenguaje Python, mientras que otros son simplemente útiles.

A partir de la última versión de Python - 3.6.2 - actualmente hay 61 nombres integrados. 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á reasignar nombres incorporados . Los nombres integrados no están reservados, y Python también les permite ser utilizados como nombres de variables.

Aquí hay un ejemplo usando el dict incorporado:

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

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

¿Qué significa "TypeError: el objeto ''list'' no es invocable"?

En pocas palabras, la razón por la que ocurre el error es porque reasignó la list nombres incorporada 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 list , que es un objeto de clase que representa la lista de Python.

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

myrange = list(range(1, 10))

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

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

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

¿Cómo puedo solucionar el error?

Si obtiene un error similar, como este que dice que un "objeto no es invocable", 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 infractora. Por ejemplo, para arreglar 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 para nombrar variables.

Este es un error muy común que cometen los nuevos y viejos usuarios de Python. Es por eso que es importante evitar siempre usar nombres integrados como variables como str , dict , list , range , etc.

Muchos linters e IDEs le avisarán cuando intente utilizar un nombre integrado como variable. Si comete este error con frecuencia, puede valer la pena invertir en uno de estos programas.

No cambié el nombre de un nombre incorporado, pero sigo recibiendo "TypeError: el objeto ''list'' no es invocable". ¿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 "<pyshell#32>", line 1, in <module> lst(0) TypeError: ''list'' object is not callable

Para obtener una explicación del problema completo y qué se puede hacer para solucionarlo, vea TypeError: el objeto ''list'' no es invocable al intentar acceder a una lista .

Esta pregunta ya tiene una respuesta aquí:

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 intento ejecutar mi script, Python genera un error:

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

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


Aquí está el mcve !

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

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