Guía de diagnóstico

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.

Revisado 2026-09-30Ejemplos y diagnóstico

Haz un inventario de nombres disponibles

nameerror.py
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

  1. Typo: precio frente a preico.
  2. Orden: usas el nombre antes de ejecutar la asignación.
  3. Rama: el nombre solo se crea dentro de un if que no siempre se ejecuta.
  4. Import: importaste modulo as m pero después intentas usar modulo.

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”.

Señal de que ya lo entiendesPuedes provocar este error con un ejemplo mínimo, explicar qué supuesto se rompió y elegir una corrección que conserve la intención del programa.

Referencia técnica: documentación oficial de excepciones de Python.