Confused by Python and nested scoping (2.4.3)
Fredrik Lundh
fredrik at pythonware.com
Thu Apr 20 00:24:01 EDT 2006
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>
More information about the Python-list
mailing list