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