Sean Givan wrote: > Hi. I'm new to Python, and downloaded a Windows copy a little while > ago. I was doing some experiments with nested functions, and ran into > something strange. > > This code: > > def outer(): > val = 10 > def inner(): > print val > inner() > > outer() > > ..prints out the value '10', which is what I was expecting. > > But this code.. > > def outer(): > val = 10 > def inner(): > print val > val = 20 > inner() > print val > > outer() > > ..I expected to print '10', then '20', but instead got an error: > > print val > UnboundLocalError: local variable 'val' referenced before assignment. > > I'm thinking this is some bug where the interpreter is getting ahead of > itself, spotting the 'val = 20' line and warning me about something that > doesn't need warning. Or am I doing something wrong?
reading the reference documentation may help: http://docs.python.org/ref/naming.html "If a name binding operation occurs anywhere within a code block, all uses of the name within the block are treated as references to the current block." </F> -- http://mail.python.org/mailman/listinfo/python-list