Saltar al contenido

Python 3: UnboundLocalError: variable local a la que se hace referencia antes de la asignación

Solución:

Esto se debe a que, aunque Var1 existe, también está utilizando una declaración de asignación en el nombre Var1 dentro de la función (Var1 -= 1 en la línea inferior). Naturalmente, esto crea una variable dentro del alcance de la función llamada Var1 (sinceramente, un -= o += solo actualizará (reasignará) una variable existente, pero por razones desconocidas (probablemente coherencia en este contexto), Python la trata como una asignación). El intérprete de Python ve esto en el momento de la carga del módulo y decide (correctamente) que el alcance global Var1 no debe usarse dentro del ámbito local, lo que genera un problema cuando intenta hacer referencia a la variable antes de que se asigne localmente.

El uso de variables globales, fuera de la necesidad, generalmente es mal visto por los desarrolladores de Python, porque conduce a un código confuso y problemático. Sin embargo, si desea utilizarlos para lograr lo que implica su código, simplemente puede agregar:

global Var1, Var2

dentro de la parte superior de su función. Esto le dirá a Python que no tiene la intención de definir un Var1 o Var2 variable dentro del ámbito local de la función. El intérprete de Python ve esto en el momento de la carga del módulo y decide (correctamente) buscar cualquier referencia a las variables mencionadas anteriormente en el alcance global.

Algunos recursos

  • el sitio web de Python tiene una gran explicación para este problema común.
  • Python 3 ofrece un nonlocal declaración – compruébalo también.

Si establece el valor de una variable dentro de la función, python lo entiende como la creación de una variable local con ese nombre. Esta variable local enmascara la variable global.

En tu caso, Var1 se considera una variable local y se usa antes de establecerse, de ahí el error.

Para resolver este problema, puede decir explícitamente que es global poniendo global Var1 en tu función.

Var1 = 1
Var2 = 0
def function():
    global Var1
    if Var2 == 0 and Var1 > 0:
        print("Result One")
    elif Var2 == 1 and Var1 > 0:
        print("Result Two")
    elif Var1 < 1:
        print("Result Three")
    Var1 =- 1
function()

Puede solucionar este problema pasando parámetros en lugar de confiar en Globals

def function(Var1, Var2): 
    if Var2 == 0 and Var1 > 0:
        print("Result One")
    elif Var2 == 1 and Var1 > 0:
        print("Result Two")
    elif Var1 < 1:
        print("Result Three")
    return Var1 - 1
function(1, 1)
¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *