Nitro wrote: > Hello, > > today I wrote this piece of code and I am wondering why it does not work > the way I expect it to work. Here's the code: > > y = 0 > def func(): > y += 3 > func() > > This gives an > > UnboundLocalError: local variable 'y' referenced before assignment > > If I change the function like this: > > y = 0 > def func(): > print y > func() > > then no error is thrown and python apparently knows about 'y'. > > I don't understand why the error is thrown in the first place. Can > somebody explain the rule which is causing the error to me?
The reason is that python's scoping rules have to somehow determine if a variable is local to a function or part of the surrounding context. Because python lacks variable declarations, what is does to infer the scope of a variable is to check if it is part of the left-side of an assignment. So in the first case, y is considered a func-local variable - which of course you didn't initialize. This behavior has been subject of quite a few critical discussions - yet you have to live with it. diez -- http://mail.python.org/mailman/listinfo/python-list