Qué significa UnboundLocalError y cómo solucionarlo
Referencia del error
UnboundLocalError
Lenguaje
Severidad
MediaCuándo ocurre
UnboundLocalError es una subclase de NameError que se lanza cuando se referencia una variable local antes de que se le haya asignado un valor.
Posibles soluciones
Declara la variable con global (para el nivel de módulo) o nonlocal (para el ámbito de función envolvente) antes de modificarla. Alternativamente, pasa el valor como parámetro y devuelve el nuevo valor en lugar de mutar el estado externo.
Errores relacionados
Más detalles
UnboundLocalError es una subclase de NameError que se lanza cuando se referencia una variable local antes de que se le haya asignado un valor. Python determina el ámbito de la variable en tiempo de compilación: si un nombre se asigna en cualquier parte de una función, se trata como local en toda esa función.
Por qué ocurre
- •Una variable se asigna dentro de una función pero se lee antes de que se alcance la línea de asignación.
- •Una asignación aumentada (+=, -=) sobre un nombre que existe en el ámbito envolvente pero no localmente.
- •Una rama condicional asigna la variable solo a veces, pero se lee incondicionalmente.
- •Usar el mismo nombre para una variable local y un parámetro de forma confusa.
Posibles soluciones
Declara la variable con global (para el nivel de módulo) o nonlocal (para el ámbito de función envolvente) antes de modificarla. Alternativamente, pasa el valor como parámetro y devuelve el nuevo valor en lugar de mutar el estado externo.
Ejemplos
Código que causa el error
count = 0
def increment():
count += 1 # reads count before assigning
increment()Error en la terminal
UnboundLocalError: local variable 'count' referenced before assignment
Código corregido
count = 0
def increment():
global count
count += 1
increment()
print(count) # 1Practica en inglés
¿Cómo le explicarías un UnboundLocalError a un compañero dev? Elige la frase correcta:
"I hit an error...
¿Listo para practicar tu inglés en el trabajo?
Lingua-e tiene ejercicios interactivos basados en conversaciones reales de developers: standups, code reviews, retrospectivas y más. Practica hasta que salga solo.
Prueba Lingua-e gratis