TypeError: el objeto ‘lista’ no se puede llamar en python

11 minutos de lectura

TypeError el objeto lista no se puede llamar en python
khan shah

Soy novato en Python y sigo un tutorial. Hay un ejemplo de list en el tutorial:

example = list('easyhoss')

Ahora, en el tutorial, example= ['e','a',...,'s']. Pero en mi caso estoy recibiendo el siguiente error:

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

Por favor, dime dónde me equivoco. Busqué SO esto pero es diferente.

  • En algún lugar que hayas asignado una instancia de lista real al nombre listsombreando el incorporado; no hagas eso!

    – jonrsharpe

    27 de junio de 2015 a las 9:18


  • ¿asignó algún valor a example ?

    –Avinash Raj

    27 de junio de 2015 a las 9:18

  • @jonrsharpe, ¿quizás deberías dar más detalles sobre eso? OP podría no entender completamente lo que has escrito

    – riesgo x

    27 de junio de 2015 a las 9:20

  • Tratar print(list) y mira lo que obtienes.

    usuario707650

    27 de junio de 2015 a las 9:21

  • @khanshah Hay palabras clave. list no es uno de ellos.

    – juanchopanza

    27 de junio de 2015 a las 9:26

TypeError el objeto lista no se puede llamar en python
eli korvigo

Parece que has sombreado el nombre incorporado list apuntando a una clase con el mismo nombre apuntando a su instancia. Aquí hay un ejemplo:

>>> example = list('easyhoss')  # here `list` refers to the builtin class
>>> list = list('abc')  # we create a variable `list` referencing an instance of `list`
>>> example = list('easyhoss')  # here `list` refers to the instance
Traceback (most recent call last):
  File "<string>", line 1, in <module>
TypeError: 'list' object is not callable

Creo que esto es bastante obvio. Python almacena nombres de objetos (las funciones y las clases también son objetos) en espacios de nombres (que se implementan como diccionarios), por lo que puede reescribir prácticamente cualquier nombre en cualquier ámbito. No aparecerá como un error de algún tipo. Como sabrá, Python enfatiza que “los casos especiales no son lo suficientemente especiales como para romper las reglas”. Y hay dos reglas principales detrás del problema al que te has enfrentado:

  1. Espacios de nombres. Python admite espacios de nombres anidados. En teoría, puede anidar infinitamente espacios de nombres. Como ya mencioné, los espacios de nombres son básicamente diccionarios de nombres y referencias a los objetos correspondientes. Cualquier módulo que cree obtiene su propio espacio de nombres “global”. De hecho, es solo un espacio de nombres local con respecto a ese módulo en particular.

  2. Alcance. Cuando hace referencia a un nombre, el tiempo de ejecución de Python lo busca en el espacio de nombres local (con respecto a la referencia) y, si dicho nombre no existe, repite el intento en un espacio de nombres de nivel superior. Este proceso continúa hasta que no quedan espacios de nombres superiores. En ese caso obtienes un NameError. Las funciones y clases integradas residen en un espacio de nombres especial de orden superior __builtins__. Si declaras una variable llamada list en el espacio de nombres global de su módulo, el intérprete nunca buscará ese nombre en un espacio de nombres de nivel superior (es decir __builtins__). Del mismo modo, suponga que crea una variable var dentro de una función en su módulo, y otra variable var en el módulo. Entonces, si haces referencia var dentro de la función, nunca obtendrá el global varporque hay un var en el espacio de nombres local: el intérprete no necesita buscarlo en otro lugar.

Aquí hay una ilustración simple.

>>> example = list("abc")  # Works fine
>>> 
>>> # Creating name "list" in the global namespace of the module
>>> list = list("abc")
>>> 
>>> example = list("abc")
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: 'list' object is not callable
>>> # Python looks for "list" and finds it in the global namespace,
>>> # but it's not the proper "list".
>>> 
>>> # Let's remove "list" from the global namespace
>>> del list
>>> # Since there is no "list" in the global namespace of the module,
>>> # Python goes to a higher-level namespace to find the name. 
>>> example = list("abc")  # It works.

Entonces, como puede ver, no hay nada especial en las funciones integradas de Python. Y tu caso es un mero ejemplo de reglas universales. Será mejor que use un IDE (por ejemplo, una versión gratuita de PyCharm o Atom con complementos de Python) que resalte el sombreado de nombres para evitar tales errores.

También podría preguntarse qué es un “invocable”, en cuyo caso puede leer esta publicación. list, siendo una clase, es invocable. Llamar a una clase desencadena la construcción e inicialización de instancias. Una instancia también podría ser invocable, pero list las instancias no lo son. Si está aún más desconcertado por la distinción entre clases e instancias, es posible que desee leer la documentación (muy convenientemente, la misma página cubre los espacios de nombres y el alcance).

Si desea obtener más información sobre los elementos integrados, lea la respuesta de Christian Dean.

PD Cuando inicia una sesión interactiva de Python, crea un módulo temporal.

  • ¿Entonces Qué es lo que hace? La lista está integrada. Debería funcionar bien.

    – khan shah

    27 de junio de 2015 a las 9:24

  • @khanshah Python es muy flexible: puede reasignar funciones integradas a otra cosa, como aquí.

    usuario707650

    27 de junio de 2015 a las 9:25

  • Siempre puede recuperar el integrado original con __builtins__.list.

    usuario707650

    27 de junio de 2015 a las 9:27

  • @Evert He hecho una edición en cuestión. Por favor, ayúdame con eso.

    – khan shah

    27 de junio de 2015 a las 9:35

  • ¡Muchas gracias! ¡Wow, los novatos serán novatos después de todo! Estaba cometiendo el mismo error y el comando del(list) solucionó el problema como usted indicó. Muchas gracias…. aprendí algo nuevo.

    – Estadísticas_Amante

    5 de agosto de 2021 a las 3:39

1646751792 781 TypeError el objeto lista no se puede llamar en python
decano cristiano

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 integrado es un nombre que el intérprete de Python ya ha asignado un valor predefinido. El valor puede ser un función o clase objeto. 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 – Hay actualmente 61 nombres incorporados. Puede encontrar una lista completa de los nombres y cómo deben usarse en la sección de documentación. Funciones integradas.

Sin embargo, un punto importante a tener en cuenta es que Pitón no detenerte re-asignación de nombres incorporados. Los nombres incorporados no están reservados y Python también permite que se usen como nombres de variables.

Aquí hay un ejemplo usando el dict incorporado:

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

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

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

En pocas palabras, la razón por la que se produce el error es porque usted reasignado los nombre incorporado list en el guion:

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

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

Por lo tanto, cuando intentaste usar el list clase para crear una nueva lista a partir de una range objeto:

myrange = list(range(1, 10))

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

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

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

¿Cómo puedo corregir el error?

Supongamos que tiene un código como el siguiente:

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')

Ejecutar el código anterior produce el siguiente error:

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

Si obtiene un error similar, como el anterior, que dice que “el objeto no se puede llamar”, es probable que haya utilizado un nombre incorporado como variable en su código. En este y otros casos, la solución es tan simple como cambiar el nombre de la variable infractora. Por ejemplo, para corregir el código anterior, podríamos cambiar el nombre de nuestro list variable 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 cómo 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, rangeetc

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

No cambié el nombre de un nombre incorporado, pero sigo recibiendo “Error de tipo: el objeto ‘lista’ 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 "<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, consulte TypeError: el objeto ‘list’ no se puede llamar al intentar acceder a una lista.

Si está en una sesión interactiva y no desea reiniciar, puede eliminar el sombreado con

del list

En la liga de los errores estúpidos de los lunes por la mañana, usar corchetes en lugar de corchetes al intentar acceder a un elemento de la lista también le dará el mismo mensaje de error:

l=[1,2,3]

print(l[2])#GOOD
print(l(2))#BAD

TypeError: el objeto ‘lista’ no se puede llamar

1646751793 197 TypeError el objeto lista no se puede llamar en python
Kevin

Es posible que haya utilizado el nombre integrado ‘lista’ para una variable en su código. Si está utilizando el cuaderno Jupyter, a veces incluso si cambia el nombre de esa variable de ‘lista’ a algo diferente y vuelve a ejecutar esa celda, aún puede obtener el error. En este caso, debe reiniciar Kernal. Para asegurarse de que el nombre ha cambiado, haga clic en la palabra ‘lista’ cuando esté creando un objeto de lista y presione Cambio+Pestañay verifique si Docstring lo muestra como una lista vacía.

Nombre de lista incorporado usado para mi lista

Cambie el nombre de mi lista a my_list pero aún obtenga un error, Shift + Tab muestra que la lista aún contiene los valores de my_list

Reinicie Kernal y todo está bien

1646751796 348 TypeError el objeto lista no se puede llamar en python
Comunidad

Por que TypeError: 'list' object is not callable ¿aparecer?

Explicación:

Es porque definiste list como una variable antes (estoy bastante seguro), por lo que sería una lista, ya no la función, es por eso que todos no deberían nombrar funciones de variables, lo siguiente es lo mismo que está haciendo ahora:

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

Por lo tanto, necesita que sea la función predeterminada de list, ¿cómo detectar si lo es? Solo usa:

>>> list
<class 'list'>
>>> list = [1,2,3]
>>> list
[1, 2, 3]
>>> list()
Traceback (most recent call last):
  File "<pyshell#4>", line 1, in <module>
    list()
TypeError: 'list' object is not callable
>>> 

¿Cómo detecto si un nombre de variable es una función? bueno, solo mira si tiene un color diferente, o usa un código como:

>>> 'list' in dir(__builtins__)
True
>>> 'blah' in dir(__builtins__)
False
>>> 

Después de esto, debes saber por qué TypeError: 'list' object is not callable aparecer.

Bien, entonces ahora…

Cómo arreglar esto TypeError: 'list' object is not callable ¿error?

Código:

Tienes que hacer __builtins__.list():

>>> list = [1,2,3]
>>> __builtins__.list()
[]
>>> 

O usar []:

>>> list = [1,2,3]
>>> []
[]
>>> 

o eliminar list variable de memoria:

>>> list = [1,2,3]
>>> del list
>>> list()
[]
>>> 

O simplemente cambie el nombre de la variable:

>>> lst = [1,2,3]
>>> list()
[]
>>> 

PD El último es el más preferible, supongo 🙂

Hay un montón de soluciones que funcionan.

Referencias:

‘id’ es un nombre de variable incorrecto en Python

¿Cómo utilizo una palabra clave como nombre de variable?

¿Cómo usar la palabra clave reservada como nombre de variable en python?

1646751797 39 TypeError el objeto lista no se puede llamar en python
Jorge

descubra lo que ha asignado a ‘lista’ mostrándolo

>>> print(list)

si tiene contenido hay que limpiarlo con

>>> del list

ahora muestre ‘lista’ nuevamente y espere esto

<class 'list'>

Una vez que vea esto, puede continuar con su copia.

¿Ha sido útil esta solución?

Esta web utiliza cookies propias y de terceros para su correcto funcionamiento y para fines analíticos y para mostrarte publicidad relacionada con sus preferencias en base a un perfil elaborado a partir de tus hábitos de navegación. Al hacer clic en el botón Aceptar, acepta el uso de estas tecnologías y el procesamiento de tus datos para estos propósitos. Configurar y más información
Privacidad