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

_______________________________________________
Python-Dev mailing list
Python-Dev@python.org
http://mail.python.org/mailman/listinfo/python-dev
Unsubscribe: 
http://mail.python.org/mailman/options/python-dev/archive%40mail-archive.com

Reply via email to