157
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?

Samuel Liew
  • 72,637
  • 105
  • 156
  • 238
foxneSs
  • 2,167
  • 3
  • 17
  • 20
  • 9
    It is local, because you assign to it within the function. – Daniel Roseman Aug 10 '12 at 15:41
  • 2
    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 Aug 15 '17 at 19:19

3 Answers3

272

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.

Florin Stingaciu
  • 7,775
  • 2
  • 23
  • 43
61

Best solution: Don't use globals

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

>>> test1 = test_func(test1)
>>> test1
1
jamylak
  • 120,885
  • 29
  • 225
  • 225
12

You have to specify that test1 is global:

test1 = 0
def testFunc():
    global test1
    test1 += 1
testFunc()
Stanislav Heller
  • 543
  • 2
  • 10