"UnboundLocalError: local variable referenced before assignment" when incrementing variable in function

Question:

I am getting this error and I’ve read other posts but they say to put global before dollars = 0 which produces a syntax error because it doesn’t allow the = 0. I’m using dollars as a counter so I can keep track of what I add to it and display it back when needed.

dollars = 0

def sol():
    print('Search or Leave?')
    sol = input()
    if sol == 'Search':
        search()
    if sol == 'Leave':
        leave()

def search():
    print('You gain 5 bucks')
    dollars = dollars + 5
    shop()

def leave():
    shop()

def shop():
    shop = input()
    if shop == 'Shortsword':
        if money < 4:
            print('I'm sorry, but you don't have enough dollars to buy that item.')
            shop1()
        if money > 4:
            print('Item purchased!')
            print('You now have ' + dollars + ' dollars.')

sol()

Error message:

Traceback (most recent call last):
  File "C:/Users/justin/Python/Programs I Made/Current/Testing.py", line 29, in <module>
    sol()
  File "C:/Users/justin/Python/Programs I Made/Current/Testing.py", line 7, in sol
    search()
  File "C:/Users/justin/Python/Programs I Made/Current/Testing.py", line 13, in search
    dollars = dollars + 5
UnboundLocalError: local variable 'dollars' referenced before assignment
Asked By: Justin

||

Answers:

You need to put global dollars, on a line on its own, inside any function where you change the value of dollars. In the code you’ve shown that is only in search(), although I assume you’ll also want to do it inside shop() to subtract the value of the item you buy…

Answered By: Daniel Roseman

You need to add global dollars, like follows

def search():
    global dollars
    print('You gain 5 bucks')
    dollars = dollars + 5
    shop()

Everytime you want to change a global variable inside a function, you need to add this statement, you can just access the dollar variable without the global statement though,

def shop():
    global dollars
    shop = input("Enter something: ")
    if shop == 'Shortsword':
        if dollars < 4:          # Were you looking for dollars?
            print('I'm sorry, but you don't have enough dollars to buy that item.')
            shop1()
        if dollars > 4:
            print('Item purchased!')
            dollars -= someNumber # Change Number here
            print('You now have ' + dollars + ' dollars.')

You also need to reduce the dollars, when you shop for something!

P.S – I hope you’re using Python 3, you’ll need to use raw_input instead.

Answered By: Sukrit Kalra
Categories: questions Tags:
Answers are sorted by their score. The answer accepted by the question owner as the best is marked with
at the top-right corner.