numeros - TypeError: el objeto ''list'' no se puede llamar en python
nombres de variables en python (4)
Soy novato de 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 me sale 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 donde estoy equivocado Busqué TAN this pero es diferente.
Es posible que haya usado el nombre integrado "lista" para una variable en su código. Si está utilizando el bloc de notas Jupyter, a veces incluso si cambia el nombre de esa variable de "lista" a algo diferente y vuelve a ejecutar esa celda, es posible que reciba el error. En este caso es necesario reiniciar el kernal. Para asegurarse de que el nombre haya cambiado, haga clic en la palabra ''lista'' cuando esté creando un objeto de lista y presione Shit + Tab, y verifique si Docstring lo muestra como una lista vacía.
Para mí fue un servidor de matraz que devolvió algunos arrays de videos
(que esperaba tener en formato json ...)
añadiendo json.dumps(videos)
solucionado este problema
Parece que has seguido la list
nombres integrada por un nombre de instancia en algún lugar de tu código.
>>> example = list(''easyhoss'')
>>> list = list(''abc'')
>>> example = list(''easyhoss'')
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 los nombres de objetos (las funciones y las clases también son objetos) en los diccionarios (los espacios de nombres se implementan como diccionarios), por lo que puede volver a escribir casi cualquier nombre en cualquier ámbito. No aparecerá como un error de algún tipo. Será mejor que uses un IDE (por ejemplo, una versión gratuita de PyCharm o Atom con complementos de Python) que resalte el sombreado de nombres.
Editar . Gracias a sus preguntas adicionales, creo que vale la pena contar con una cobertura adicional sobre los elementos integrados y el alcance. Como sabrán, Python enfatiza que "los casos especiales no son lo suficientemente especiales como para romper las reglas". Y hay un par de reglas detrás del problema que has enfrentado.
Espacios de nombres . Python soporta espacios de nombres anidados. Teóricamente puedes anidar interminablemente espacios de nombres. Como ya he mencionado, los espacios de nombres son básicamente diccionarios de nombres y referencias a los objetos correspondientes. Cualquier módulo que crees obtiene su propio espacio de nombres "global". De hecho, es solo un espacio de nombres local con respecto a ese módulo en particular.
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 tal nombre no existe, repite el intento en un espacio de nombres de nivel superior. Este proceso continúa hasta que no queden espacios de nombres superiores. En ese caso obtienes un
NameError
. Las funciones y clases integradas residen en un espacio de nombres de alto orden especial__builtins__
. Si declara una variable llamadalist
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__
). De manera similar, suponga que crea una variablevar
dentro de una función en su módulo y otra variablevar
en el módulo. Luego, si hace referencia avar
dentro de la función, nunca obtendrá lavar
global, porque hay unavar
en el espacio de nombres local; el intérprete no tiene necesidad de buscarla en otra parte.
Aquí hay una simple ilustración.
>>> 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 se ve, no hay nada especial en las incorporaciones de Python. Y tu caso es un mero ejemplo de reglas universales.
PD
Cuando inicias una sesión interactiva de Python, creas un módulo temporal.
Si está en una sesión interactiva y no desea reiniciar, puede eliminar el seguimiento con
del list