Can not increment global variable from function in python

Python

Python Problem Overview


> Possible Duplicate:
> Using global variables in a function other than the one that created them

I have the following script:

COUNT = 0

def increment():
	COUNT = COUNT+1

increment()

print COUNT

I just want to increment global variable COUNT, but this gives me the following error:

Traceback (most recent call last):
  File "test.py", line 6, in <module>
    increment()
  File "test.py", line 4, in increment
    COUNT = COUNT+1
UnboundLocalError: local variable 'COUNT' referenced before assignment

Why is it so?

Python Solutions


Solution 1 - Python

its a global variable so do this :

COUNT = 0

def increment():
    global COUNT
    COUNT = COUNT+1

increment()

print COUNT

Global variables can be accessed without declaring the global but if you are going to change their values the global declaration is required.

Solution 2 - Python

This is because globals don't bleed into the scope of your function. You have to use the global statement to force this for assignment:

>>> COUNT = 0
>>> def increment():
...     global COUNT
...     COUNT += 1
... 
>>> increment()
>>> print(COUNT)
1

Note that using globals is a really bad idea - it makes code hard to read, and hard to use. Instead, return a value from your function and use that to do something. If you need to have data accessible from a range of functions, consider making a class.

It's also worth noting that CAPITALS is generaly reserved for constants, so it's a bad idea to name your variables like this. For normal variables, lowercase_with_underscores is preferred.

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
Questionuser873286View Question on Stackoverflow
Solution 1 - PythoncobieView Answer on Stackoverflow
Solution 2 - PythonGareth LattyView Answer on Stackoverflow