[Python-Dev] more timely detection of unbound locals
Steven D'Aprano
steve at pearwood.info
Mon May 9 18:39:14 CEST 2011
Eli Bendersky wrote:
>> I think you are making an unwarranted assumption about what is "more
>> expected". I presume you are thinking that the expected behaviour is that
>> foo() should:
>>
>> print global x (5)
>> assign 1 to local x
>> print local x (1)
>>
>> If we implemented this change, there would be no more questions about
>> UnboundLocalError, but instead there would be lots of questions like "why is
>> it that globals revert to their old value after I change them in a
>> function?".
>>
>
> True, but this is less confusing and follows the rules in a more
> straightforward way. x = 1 without a 'global x' assigns a local x, this make
> sense and is similar to what happens in C where an inner declaration
> temporarily shadows a global one.
I disagree that it is less confusing. Instead of a nice, straightforward
error that you can google, the function will silently do the wrong
thing, giving no clue that weirdness is happening.
def spam():
if x < 0: # refers to global x
x = 1 # now local
if x > 0: # could be either global or local
x = x - 1 # local on the LHS of the equal
# sometimes global on the RHS
else:
x += 1 # local x, but what value does it have?
Just thinking about debugging the mess that this could make gives me a
headache.
--
Steven
More information about the Python-Dev
mailing list