Resumen: Para resolver un UnboundLocalError
cuando la variable local se reasigne después del primer uso, puede usar la palabra clave global
o la palabra clave nonlocal
. La palabra clave global
le permite modificar los valores de una variable global desde el ámbito local de una función, mientras que la palabra clave nonlocal
proporciona una funcionalidad similar en el caso de funciones anidadas.
Problema: Dada una variable local. ¿Cómo resolver un UnboundLocalError
cuando la variable local se reasigna después del primer uso?
Ejemplo:
val = 100def func(): val = val + 100 print(val)func()
Producto:
Traceback (most recent call last): File "C:/Users/Shubham-PC/PycharmProjects/pythonProject1/main.py", line 9, in <module> func() File "C:/Users/Shubham-PC/PycharmProjects/pythonProject1/main.py", line 5, in func val = val + 100UnboundLocalError: local variable 'val' referenced before assignment
Antes de tratar con las soluciones a nuestro problema, debemos entender la causa raíz detrás de UnboundLocalError
.
Causa raíz De UnboundLocalErrors:
Cuando se asigna una variable dentro de una función, se trata como una variable local de forma predeterminada en Python. Si se hace referencia a una variable local antes de que se le haya asignado/vinculado un valor, se genera un valor UnboundLocalError
. En el ejemplo anterior, cuando el intérprete de Python lee la variable 'val'
dentro de la función func()
, asume que 'val'
es una variable local. Sin embargo, pronto se da cuenta de que la variable local ha sido referenciada antes de que se le haya asignado algún valor dentro de la función. Por lo tanto, lanza un UnboundLocalError
.
En otras palabras, solo podemos acceder a una variable global dentro de una función, pero no podemos modificarla desde dentro de la función (a menos que fuerce una asignación global o no local utilizando las palabras clave global
o nonlocal
).
Nota: La clase padre de todas las excepciones de Python es BaseException
. El siguiente diagrama representa la jerarquía de excepciones de UnboundLocalError
.

Ahora que sabemos por qué y cuándo se genera un UnboundLocalError
, echemos un vistazo a las soluciones probables para superar este error.
Tabla de Contenidos
Método 1: Usando la palabra clave global
Podemos usar la palabra clave global
para acceder y modificar una variable global desde el ámbito local de una función. Cualquier variable creada fuera de una función es global de forma predeterminada, mientras que cualquier variable creada dentro de la función es local de forma predeterminada. Por lo tanto, para modificar una variable global desde dentro de la función y evitar un UnboundLocalError
podemos usar la palabra clave global
.
Echemos un vistazo al siguiente código que simplifica el concepto anterior:
val = 100print("Value at First Usage: ", val)def func(): global val val = val + 100 print("Output after Modification within func(): ", val)func()
Producto:
Value at First Usage: 100Output after Modification within func(): 200
Método 2: Usando la palabra clave no local
La palabra clave nonlocal
se usa cuando tenemos una función anidada. En tal situación, el alcance local de una variable podría no definirse, es decir, el alcance de una variable no es ni local ni global.
Echemos un vistazo al siguiente ejemplo para entender el uso de la palabra clave nonlocal
para lidiar con nuestro problema.
def func(): val = 50 print("Output of func:", val) def foo(): nonlocal val val = val + 100 print("Output of foo:", val) foo() print("Output of func() after changes made to foo():", val)func()
Salida
Output of func: 50Output of foo: 150Output of func() after changes made to foo(): 150
En el programa anterior, la palabra clave nonlocal
se utiliza con la variable val
dentro de la función anidada foo()
para crear una variable no local. Si el valor de la variable nonlocal
cambia, los cambios también se reflejan en la variable local.
Descargo de responsabilidad: la palabra clave nonlocal
solo funciona en Python 3 y versiones posteriores.
Método 3: Uso de un objeto mutable
Dado que nonlocal
no funciona en versiones de Python anteriores a Python 3, puede usar un objeto mutable, como un diccionario de python, para almacenar los valores si no desea crear una variable global.
Echemos un vistazo al siguiente programa para comprender el uso de un objeto mutable con el fin de superar el UnboundLocalError
.
variables = { # creating a mutable object/dictionary 'val': 100}print('Output before Modification of val: ', variables)def func(): variables += 50 print('Output after Modification of val: ', variables)func()
Output before Modification of val: 100Output after Modification of val: 150
Método 4: Pasar parámetros a la Función
Esta es la forma tradicional de resolver nuestro problema. En lugar de usar una variable global, podemos pasar parámetros a la función definida para evitar un UnboundLocalError
. Echemos un vistazo al siguiente código para ver cómo se puede hacer esto:
val = 100print("Value of val at first use: ", val)def func(v): v = v + 100 print("Output of val after modification:", v)func(val)
Producto:
Value of val at first use: 100Output of val after modification: 200
Palabra clave global vs Palabra clave no local
Antes de concluir este artículo, echemos un vistazo a las diferencias clave entre una variable/palabra clave global
y nonlocal
.
- A diferencia de la palabra clave
global
, la palabra clavenonlocal
solo funciona en Python 3 y versiones posteriores. - La palabra clave
global
se puede usar con variables globales preexistentes o nuevas variables, mientras que la palabra clavenonlocal
se debe definir con una variable preexistente.
Conclusión
De la discusión anterior aprendimos que para tratar con UnboundLocalError
en nuestro código podemos usar uno de los siguientes métodos:
- Utilice la palabra clave
global
. - Utilice la palabra clave
nonlocal
en el caso de funciones anidadas. - Utilice un objeto mutable.
- Pasar parámetros a una función.
Espero que haya encontrado útil este artículo y que después de leerlo pueda tratar con UnboundLocalError
con facilidad. Por favor, estén atentos para artículos más interesantes.
a Dónde Ir Desde Aquí?
Basta de teoría, ¡practiquemos un poco!
Para tener éxito en la codificación, debe salir y resolver problemas reales para personas reales. Así es como puedes convertirte en una fuente de ingresos de seis cifras fácilmente. Y así es como pules las habilidades que realmente necesitas en la práctica. Después de todo, ¿de qué sirve la teoría del aprendizaje que nadie necesita?
¡Los proyectos de práctica son la forma de afilar su sierra en la codificación!
¿Desea convertirse en un maestro de código centrándose en proyectos de código prácticos que realmente le ganen dinero y resuelvan problemas para las personas?
¡Entonces conviértete en un desarrollador freelance de Python! Es la mejor manera de abordar la tarea de mejorar tus habilidades en Python, incluso si eres un completo principiante.
Únase a mi seminario web gratuito «Cómo construir su Python de Habilidades de Altos Ingresos» y vea cómo hice crecer mi negocio de codificación en línea y cómo usted también puede hacerlo, desde la comodidad de su propio hogar.
¡Únase al seminario web gratuito ahora!
Deja una respuesta