The Quick and Easy Way to Fix Python UnboundLocalError

Srinimf
2 min readApr 3, 2023
Photo by kelisa Bernard on Unsplash

UnboundLocalError

While the variable in the function has already been defined, during execution, the result prints with an error of UnboundLocalError. Below, you will find an example that explains the issue and resolution.

Error: file ‘example.txt’ not found
Traceback (most recent call last):
File “main.py”, line 16, in <module>
open_file(“example.txt”)
File “main.py”, line 11, in open_file
if f:
UnboundLocalError: local variable ‘f’ referenced before assignment

** Process exited — Return Code: 1 **

Press Enter to exit terminal

Python program using try, except and finally

Below program explains how to use try, except and finally blocks in python. But during the execution, it prints UnboundLocalError.

Program using try, except and finally

# Define a function that may raise an exception

def open_file(filename):

try:

f = open(filename, “r”)

contents = f.read()

except FileNotFoundError:

print(f”Error: file ‘{filename}’ not found”)

else:

print(f”Contents of file ‘{filename}’:\n{contents}”)

finally:

if f:

f.close()

print(f”File ‘{filename}’ has been closed.”)

# Call the function with a valid filename

open_file(“example.txt”)

# Call the function with an invalid filename

open_file(“invalid.txt”)

The output:

Error: file ‘example.txt’ not found

Traceback (most recent call last):

File “main.py”, line 16, in <module>

open_file(“example.txt”)

File “main.py”, line 11, in open_file

if f:

UnboundLocalError: local variable ‘f’ referenced before assignment

** Process exited — Return Code: 1 **

Press Enter to exit terminal

Resolution for UnboundLocalError

In the function, before the try block, add f = None. That resolves the issue. Here is the corrected program.

Corrected program

# Define a function that may raise an exception

def open_file(filename):

try:

f = None

f = open(filename, “r”)

contents = f.read()

except FileNotFoundError:

print(f”Error: file ‘{filename}’ not found”)

else:

print(f”Contents of file ‘{filename}’:\n{contents}”)

finally:

if f:

f.close()

print(f”File ‘{filename}’ has been closed.”)

# Call the function with a valid filename

open_file(“example.txt”)

# Call the function with an invalid filename

open_file(“invalid.txt”)

The output is:

Error: file ‘example.txt’ not found

Error: file ‘invalid.txt’ not found

** Process exited — Return Code: 0 **

Press Enter to exit terminal

Summary

  • Return statement not coded in the function. As a result, it gave UnboundLocalError.
  • A function returns the None object by default if the control flow falls off the end of the function body without running into a return statement.

Check out for more articles @ ApplyBigAnalytics

--

--