Python 3: UnboundLocalError: local variable referenced before assignment

Python 3: UnboundLocalError: local variable referenced before assignment

This is because, even though Var1 exists, youre also using an assignment statement on the name Var1 inside of the function (Var1 -= 1 at the bottom line). Naturally, this creates a variable inside the functions scope called Var1 (truthfully, a -= or += will only update (reassign) an existing variable, but for reasons unknown (likely consistency in this context), Python treats it as an assignment). The Python interpreter sees this at module load time and decides (correctly so) that the global scopes Var1 should not be used inside the local scope, which leads to a problem when you try to reference the variable before it is locally assigned.

Using global variables, outside of necessity, is usually frowned upon by Python developers, because it leads to confusing and problematic code. However, if youd like to use them to accomplish what your code is implying, you can simply add, inside the top of your function:

global Var1, Var2

This will tell Python that you do not intend to define a Var1 or Var2 variable inside the functions local scope. The Python interpreter sees this at module load time and decides (correctly so) to look up any references to the aforementioned variables in the global scope.

Some Resources

  • the Python website has a great explanation for this common issue.
  • Python 3 offers a related nonlocal statement – check that out as well.

If you set the value of a variable inside the function, python understands it as creating a local variable with that name. This local variable masks the global variable.

In your case, Var1 is considered as a local variable, and its used before being set, thus the error.

To solve this problem, you can explicitly say its a global by putting global Var1 in you function.

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()

Python 3: UnboundLocalError: local variable referenced before assignment

You can fix this by passing parameters rather than relying on 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)

Leave a Reply

Your email address will not be published.