NameError: Python no encuentra el nombre que intentas usar
El objeto puede existir en tu cabeza o incluso en otra parte del programa, pero en ese punto Python no puede resolver ese nombre en los ámbitos disponibles.
Haz un inventario de nombres disponibles
precio = 12 print(preico)
Aquí el dato existe, pero el nombre escrito no. Antes de cambiar lógica, compara carácter por carácter y pregunta: ¿dónde se asigna exactamente este nombre antes de esta línea?
Cuatro caminos diferentes hacia el mismo NameError
- Typo:
preciofrente apreico. - Orden: usas el nombre antes de ejecutar la asignación.
- Rama: el nombre solo se crea dentro de un
ifque no siempre se ejecuta. - Import: importaste
modulo as mpero después intentas usarmodulo.
No lo confundas con UnboundLocalError
NameError significa que no se encontró el nombre. UnboundLocalError es más específico: Python ya decidió que el nombre es local a una función, pero intentas leerlo antes de asignarle un valor local.
Trazado útil: nombre → primera asignación → uso
Para depurar, marca la primera línea que crea cada nombre y sigue si todas las rutas de ejecución llegan a ella antes del uso. Esta técnica funciona mejor que añadir valores “por si acaso”.
Referencia técnica: documentación oficial de excepciones de Python.