[Python-ideas] Why does += trigger UnboundLocalError?

Georg Brandl g.brandl at gmx.net
Thu Jun 2 07:17:19 CEST 2011


On 01.06.2011 10:26, Carl M. Johnson wrote:
> 
> 
> On Tue, May 31, 2011 at 9:05 PM, Georg Brandl <g.brandl at gmx.net
> <mailto:g.brandl at gmx.net>> wrote:
> 
>     Sure, this can only work if the local is assigned somewhere before the augmented
>     assign statement.  But this is just like accessing a local before its
>     assignment: in the case of
> 
>     x = 1
>     def f():
>        print x
>        x = 2
> 
>     we also don't treat the first "x" reference as a nonlocal.
> 
>  
> I don't think that's a counterexample to the point I'm trying to make. We all
> agree that if there's an x= somewhere in the function body, then we have to
> treat the variable as a local. The only possible way around that would be to
> solve the halting problem in order to figure out if a particular line of code
> will be reached or not. Agreed, sure, we have to treat the LHS of = as a local.
> But += is fundamentally different.

You keep saying that, but I just can't see how += is fundamentally different
from =, given its definition as x = x.__iadd__(y).

This is a situation that comes up from time to time, where it seems logical to
make a change that satisfies "DWIM" feelings, but makes the languge more
inconsistent by introducing special cases.  This doesn't feel right to me (and
the Zen agrees ;)

Georg




More information about the Python-ideas mailing list