[Python-Dev] Re: would warnings be appropriate for probably-misused global statements?
Guido van Rossum
guido@python.org
Wed, 06 Nov 2002 18:17:31 -0500
> > Yes. This could even be made a syntax error, as with other contextual
> > statements:
>
> This somewhat contradicts Guido's judgement that this would not be
> easy to implement. Can you come up with a patch?
Alex suggested two different things to test for: global outside a
function, and global for a variable that is not actually set.
Global outside a function would seem easy to detect (at least as easy
as return outside a function), but you need to be careful: in a string
passed to the exec statement, one could have distinct locals and
globals, and then 'global x' outside a function would make sense.
Also, 'global x' makes sense inside a class statement.
Global for a variable that's not set should at best trigger a
warning. To detect this, you'd have to analyze all the assignments in
a block. That currently happens as part of the local variable
determination, and it may be possible to fold this in; I'm not clear
how easy it would be to get the error message refer to the correct
line number though.
But I'm not excited about this. A similar amount of analysis can
discover assigning to a variable that's not used. Isn't that more
useful? Using a name that's not defined anywhere. Etc. There are
tons of these things. PyChecker watches for all of them. I'd prefer
to make a project out of integrating PyChecker functionality into
Python, eventually, rather than attacking random things one at a time
-- the more of these we do in an ad-hoc fashion, the harder it will be
to do in a more systematic way.
--Guido van Rossum (home page: http://www.python.org/~guido/)