Code1:
# coding:utf-8
sum = 5
def add(x, y):
    print sum
    sum = x + y
if __name__ == '__main__':
    add(7, 8)
When I run the code above, I got the following error:
ssspure:python ssspure$ python test.py
Traceback (most recent call last):
  File "test.py", line 11, in <module>
    add(7, 8)
  File "test.py", line 6, in add
    print sum
UnboundLocalError: local variable 'sum' referenced before assignment
Code2:
# coding:utf-8
sum = 5
def add(x, y):
    sum = x + y
    print sum
if __name__ == '__main__':
    add(7, 8)
I can run code2 successfully.
I only moved the print sum below "sum = x + y" statement. Why did Code1 fail but Code2 runs successfully?
 
     
     
    