Open In App

UnboundLocalError Local variable Referenced Before Assignment in Python

Last Updated : 01 Mar, 2024
Improve
Improve
Like Article
Like
Save
Share
Report

Handling errors is an integral part of writing robust and reliable Python code. One common stumbling block that developers often encounter is the “UnboundLocalError” raised within a try-except block. This error can be perplexing for those unfamiliar with its nuances but fear not – in this article, we will delve into the intricacies of the UnboundLocalError and provide a comprehensive guide on how to effectively use try-except statements to resolve it.

What is UnboundLocalError Local variable Referenced Before Assignment in Python?

The UnboundLocalError occurs when a local variable is referenced before it has been assigned a value within a function or method. This error typically surfaces when utilizing try-except blocks to handle exceptions, creating a puzzle for developers trying to comprehend its origins and find a solution.

Syntax:

UnboundLocalError: local variable 'result' referenced before assignment

Why does UnboundLocalError: Local variable Referenced Before Assignment Occur?

below, are the reasons of occurring “Unboundlocalerror: Try Except Statements” in Python:

  • Variable Assignment Inside Try Block
  • Reassigning a Global Variable Inside Except Block
  • Accessing a Variable Defined Inside an If Block

Variable Assignment Inside Try Block

In the below code, example_function attempts to execute some_operation within a try-except block. If an exception occurs, it prints an error message. However, if no exception occurs, it prints the value of the variable result outside the try block, leading to an UnboundLocalError since result might not be defined if an exception was caught.

Python3




def example_function():
    try:
        result = some_operation()
    except Exception as e:
        print("An error occurred:", e)
    print(result)
 
# Calling the function
example_function()


Output:

Hangup (SIGHUP)
Traceback (most recent call last):
File "Solution.py", line 9, in <module>
example_function()
File "Solution.py", line 6, in example_function
print(result)
UnboundLocalError: local variable 'result' referenced before assignment

Reassigning a Global Variable Inside Except Block

In below code , modify_global function attempts to increment the global variable global_var within a try block, but it raises an UnboundLocalError. This error occurs because the function treats global_var as a local variable due to the assignment operation within the try block.

Python3




global_var = 42
 
def modify_global():
    try:
        global_var += 1
    except Exception as e:
        print("An error occurred:", e)
    print(global_var) 
 
# Calling the function
modify_global()


Output:

Hangup (SIGHUP)
Traceback (most recent call last):
File "Solution.py", line 11, in <module>
modify_global()
File "Solution.py", line 8, in modify_global
print(global_var)
UnboundLocalError: local variable 'global_var' referenced before assignment

Solution for UnboundLocalError Local variable Referenced Before Assignment

Below, are the approaches to solve “Unboundlocalerror: Try Except Statements”.

  • Initialize Variables Outside the Try Block
  • Avoid Reassignment of Global Variables

Initialize Variables Outside the Try Block

In modification to the example_function is correct. Initializing the variable result before the try block ensures that it exists even if an exception occurs within the try block. This helps prevent UnboundLocalError when trying to access result in the print statement outside the try block.

Python3




def example_function():
    result = None  # Initialize the variable before the try block
    try:
        result = some_operation()
    except Exception as e:
        print("An error occurred:", e)
    print(result)


Output


Avoid Reassignment of Global Variables

Below, code calculates a new value (local_var) based on the global variable and then prints both the local and global variables separately. It demonstrates that the global variable is accessed directly without being reassigned within the function.

Python3




global_var = 42
 
def modify_global():
    try:
        local_var = global_var + 1
    except Exception as e:
        print("An error occurred:", e)
    print(global_var)  # Access the global variable directly


Output


Conclusion

In conclusion , To fix “UnboundLocalError” related to try-except statements, ensure that variables used within the try block are initialized before the try block starts. This can be achieved by declaring the variables with default values or assigning them None outside the try block. Additionally, when modifying global variables within a try block, use the `global` keyword to explicitly declare them.



Like Article
Suggest improvement
Previous
Next
Share your thoughts in the comments

Similar Reads