The most common error you may encounter while working with Python and user-defined functions is
UnboundLocalError: local variable 'name' referenced before assignment
. The reason for this error occurrence is we try to access a variable before it has been assigned in the local scope or context of the function.
In this Python guide, we will walk through this Python error and discuss why this error occurs and how to solve it. We will also look at some examples so that you can get a better idea about this Python error.
The error: UnboundLocalError: local variable referenced before assignment?
The error statement
UnboundLocalError: local variable referenced before assignment
is divided into two statements
- UnboundLocalError: It is a Python error type that occurs when we mishandle the Python local variables.
- the local variable referenced before assignment : This is the error message that tells that we are trying to access or assign a new value to a Python local variable before its initialization.
Error Reasons
There are two main reasons why your Python program is showing this error.
- You are trying to create a new local variable with the same name as the global variable and using the value of the global variable.
- Or, have created a local variable inside a function using the if..else statement, and it never gets assigned, and you are accessing it.
Reason 1
This is the major scenario where the Python learner commits a mistake. When they try to create a new local variable with the same name as the global variable after accessing the global variable into the function.
Once you have accessed the global variables into a Python function, you can not create a local variable with the same name. If you do, you will receive the
UnboundLocalError: local variable referenced before assignment
error.
Example
# function
def add_last_name(lname):
#creating new variable name and accessing the global variable name
name = name + lname
print(name)
# global variable name
name = "Rahul"
# call function
add_last_name("Singh")
Output
File "main.py", line 13, in <module>
add_last_name("Singh")
File "main.py", line 4, in add_last_name
name = name + lname
UnboundLocalError: local variable 'name' referenced before assignment
Break the code
In the above example, we are getting the error because we are trying to create a new local variable
name
and accessing the global variable
name
value using the statement
name = name + lname
at line 4.
When Python executes that statement, it gets confused between the local and global variables and treats both variables as local variables. By that time, Python does not find the value of the right hand
name
so it throws the error.
Solution 1
The solution for this example is very simple. Although we can access the value of a global variable inside a function, we can not alter it. In case you want to access the global variable and change its value, you can use the Python
global
keyword.
Solution
# function
def add_last_name(lname):
# access the global name variable
global name
# alter the global name variable
name = name +" "+ lname
# global variable name
name = "Rahul"
# call function
add_last_name("Singh")
print(name)
Output
Rahul Singh
Onces we have accessed the gloable variable inside a function wihtout using
global
keyword, we can not create a new local variable by the same name.
Reason 2
Another common reason why we receive this error is when we create a local variable inside a Python if..else conditional statement, and it never gets initialized because the condition was False.
Example
# function
def is_adult(age):
if age>=18:
# define adult that that never execute
adult= True
print(adult)
# global variable name
age =12
# call function
is_adult(age)
Output
Traceback (most recent call last):
File "main.py", line 16, in <module>
is_adult(age)
File "main.py", line 7, in is_adult
print(adult)
UnboundLocalError: local variable 'adult' referenced before assignment
Break the code
The
age
value is
12
, which means the statement inside the
if age>18:
condition block did not execute. That leads to no assignment value to the
adult
variable, but at the backend, when Python executes its program line by line and initializes the variable
adult
but did not assign any value to it. So when we accessed the variable at line 7, it threw the error.
Solution 2
When we access a variable inside a local scope, we need to make sure that we initialize and assign a value to it before accessing it. If we are creating a new variable inside the if statement, we also need to make sure that there must be an else statement that also assigns the value to the variable if the condition is False.
In our above example, the value of
adult
only get assigned when the condition is true, so all we need to do is create an else statement that also assigns a value to the variable adult when the condition is False.
solution
# function
def is_adult(age):
if age>18:
# if the condition is true
adult= True
else:
# if the condition is false
adult =False
print(adult)
# global variable name
age =12
# call function
is_adult(age)
Output
Flase
Conclusion
In this Python tutorial, we discussed one of the most common Python functions error
local variable referenced before assignment
. The error raises when we try to access a local variable before its assignment inside a function. We often encounter this error when we try to access a global variable with the same name as the local variable or create a local variable inside a function that never gets assigned.
If you are still getting this error in your Python program, please comment down your code and query in the comment section, and we will try to debug it for you.
People are also reading:
- Best Way to Learn Python
- Python typeerror: ‘str’ object is not callable Solution
- Get the difference between Python vs Node.js
- Python TypeError: ‘NoneType’ object is not callable Solution
- The Notable difference between Python vs Javascript
- Python Error: TypeError: ‘tuple’ object is not callable Solution
- How to Play sounds in Python?
- Difference between Python vs Django
- Python typeerror: list indices must be integers or slices, not str Solution
Leave a Comment on this Post