bug in python's scope handling?

Philipp Weinfurter philipprw at gmx.at
Wed Jul 18 15:35:32 EDT 2001


On Wed, 18 Jul 2001 15:03:53 -0400, Steve Holden <sholden at holdenweb.com> wrote:
>> yes, this is what i thought. but is it correct?
>> i don't mean to be pedantic, but the rules are that if a variable
>> is not found in local scope, then the compiler looks up the global
>> scope and python doesn't follow this rule here.
>> it doesn't really hurt, since in 99% of all cases the programmer
>> probably _thinks_ he is referring to a local variable, but still...
> 
> The rules are correct, but you are making the mistake of assuming that
> Python determines the locality of local names by searching the
> namespace. This is where you are wrong. The compiler performs a static
> program analysis of each function, and if it sees assignments to a
> particular name (or indeed various other bindings, as described below)
> then it optimizes ALL references to that name to be local.

wait, do you mean that this is also true for assignments that occur
_after_ the statement in question?
let's try it out:
a = 1
def confuse_me():
    b = a + 1
    a = 0

confuse_me()
UnboundLocalError

aah.
now i see. i'm not sure that i like it, but i understand :)

thank you,
philipp



More information about the Python-list mailing list