143
votes
test1 = 0
def testFunc():
    test1 += 1
testFunc()

I am receiving the following error:

UnboundLocalError: local variable 'test1' referenced before assignment.

Error says that 'test1' is local variable but i thought that this variable is global

So is it global or local and how to solve this error without passing global test1 as argument to testFunc?

3
It is local, because you assign to it within the function. - Daniel Roseman
I received the same error but in my case it turned out to be an indentation problem. The code I was modifying was indented with spaces, but my editor was indenting with tabs. Dumb mistake on my part, and not at all the problem you had, but I hope to save someone out there some time by commenting here -- this was the first hit in my Google search. - Josh

3 Answers

254
votes

In order for you to modify test1 while inside a function you will need to do define test1 as a global variable, for example:

test1 = 0
def testFunc():
    global test1 
    test1 += 1
testFunc()

However, if you only need to read the global variable you can print it without using the keyword global, like so:

test1 = 0
def testFunc():
     print test1 
testFunc()

But whenever you need to modify a global variable you must use the keyword global.

55
votes

Best solution: Don't use globals

>>> test1 = 0
>>> def test_func(x):
        return x + 1

>>> test1 = test_func(test1)
>>> test1
1
11
votes

You have to specify that test1 is global:

test1 = 0
def testFunc():
    global test1
    test1 += 1
testFunc()