Tracing variable scope (local vs. global)

Terry Reedy tjreedy at udel.edu
Tue Dec 1 22:33:14 EST 2009


Manuel Graune wrote:
> Hello,
> 
> consider the following piece of code:
> 
> a=1
> b=2
> 
> def foo(c):
>     b=3
>     return a + b + c
> 
> In this case, when calling "foo", "a" will take the global value,
> "b" will take the local value and "c" will take the value assigned
> when calling the function.
> 
> Since I consider this behaviour a possible source of bugs due to
> personal sloppiness (e. g. forgetting to put "a=4" inside the
> function-body):
> 
> Is there any way to automatically check that all variables in a
> function are either local or passed in as arguments?

There are at least 3 code checking programs: pychecker, pylint, 
pyflakes. Perhaps one of them has an option to check for non-builtin 
globals. Would not be too difficult to add, I suspect.




More information about the Python-list mailing list