iJade
iJade

Reputation: 23801

Python Error :UnboundLocalError: local variable 'f' referenced before assignment

I'm trying to process some files using threading in Python.Some threads work fine with no error but some through the below exception

Exception in thread Thread-27484:
Traceback (most recent call last):
  File "/usr/lib/python2.7/threading.py", line 551, in __bootstrap_inner
    self.run()
  File "/usr/lib/python2.7/threading.py", line 504, in run
    self.__target(*self.__args, **self.__kwargs)
  File "script.py", line 62, in ProcessFile
    if f is not None:
UnboundLocalError: local variable 'f' referenced before assignment

while running my program

Here is Python function

def ProcessFile(fieldType,filePath,data):
    try:
        if fieldType == 'email':
            fname = 'email.txt'
        else:
            fname = 'address.txt'
        f1 = open(fname,'wb')
        for r in data[1:]:
            r[1] = randomData(fieldType)
            f1.write(r[1])
        f1.close()

        f = open(filePath,'wb')

        writer = csv.writer(f)
        writer.writerows(data)
        f.close()
        try:
            shutil.move(filePath,processedFileDirectory)
        except:
            if not os.path.exists(fileAlreadyExistDirectory):
                os.makedirs(fileAlreadyExistDirectory)
            shutil.move(filePath,fileAlreadyExistDirectory)
    finally:
        if f is not None:
            f.close()

Here is how i'm calling the above function through threading

t = Thread(target=ProcessFile,args=(fieldType,filePath,data))
        t.start()

Upvotes: 1

Views: 11843

Answers (1)

Corley Brigman
Corley Brigman

Reputation: 12391

Obviously, you got an exception somewhere in your 'try' clause before you actually wrote anything to f. So not only does f not hold a value, it doesn't even exist.

Simplest fix is to add

f = None

above the try clause. But probably, you are not expecting an exception that early, so maybe you should check the data you are sending this function

Upvotes: 3

Related Questions