[Python-Dev] global variable modification in functions [Re: elimination of scope bleeding of iteration variables]

Nick Coghlan ncoghlan at gmail.com
Tue May 2 13:32:15 CEST 2006


Phillip J. Eby wrote:
> And for the case where the compiler can tell the variable is accessed 
> before it's defined, there's definitely something wrong.  This code, for 
> example, is definitely missing a "global" and the compiler could in 
> principle tell:
> 
>      foo = 1
> 
>      def bar():
>          foo+=1
> 
> So I see no problem (in principle, as opposed to implementation) with 
> issuing a warning or even a compilation error for that code.  (And it's 
> wrong even if the snippet I showed is in a nested function definition, 
> although the error would be different.)
> 
> If I recall correctly, the new compiler uses a control-flow graph that 
> could possibly be used to determine whether there is a path on which a 
> local could be read before it's stored.

I think symtable.c could wander back up the lexical block stack checking that 
target names are defined for augmented assignment statements.

That said, while I'd be happy to review a patch, I'm not going to try to write 
one :)

Cheers,
Nick.

-- 
Nick Coghlan   |   ncoghlan at gmail.com   |   Brisbane, Australia
---------------------------------------------------------------
             http://www.boredomandlaziness.org


More information about the Python-Dev mailing list