3

I must be missing some very basic concept about Python's variable's scopes, but I couldn't figure out what.

I'm writing a simple script in which I would like to access a variable that is declared outside the scope of the function :

counter = 0

def howManyTimesAmICalled():
    counter += 1
    print(counter)

howManyTimesAmICalled()

Unexpectedly for me, when running I get :

UnboundLocalError: local variable 'counter' referenced before assignment

Adding a global declaration at the first line

global counter
def howManyTimesAmICalled():
    counter += 1
    print(counter)

howManyTimesAmICalled() 

did not change the error message.

What am I doing wrong? What is the right way to do it?

Thanks!

Ohad Dan
  • 1,929
  • 5
  • 17
  • 22
  • Did you add `global counter` in the first line of the `howManyTimeAmICalled` function ? – karthikr Jul 29 '13 at 16:07
  • @karthikr - I have edited my question to make it clear. Sukrit Kalra 's answer clarifies that indeed it is in the wrong place. – Ohad Dan Jul 29 '13 at 16:10

1 Answers1

8

You need to add global counter inside the function definition. (Not in the first line of your code)

Your code should be

counter = 0

def howManyTimesAmICalled():
    global counter
    counter += 1
    print(counter)

howManyTimesAmICalled()
Sukrit Kalra
  • 33,167
  • 7
  • 69
  • 71