[Python-ideas] SyntaxWarning for for/while/else without break or return?

Steven D'Aprano steve at pearwood.info
Sat Oct 10 14:15:07 CEST 2009

On Sat, 10 Oct 2009 10:22:11 pm Nick Coghlan wrote:

> For the record, there are three cases (not counting Py3k warnings)
> where we currently issue syntax warnings (but generate valid code
> anyway).
> 1. Using "import *" at function level (as it disables local variable
> optimisations):

`import *` inside a function is illegal in Python3. It's a warning in 
Python2.x only because of backwards compatibility. This was the primary 
use-case for the warning module in the first place: to warn when 
functionality is being deprecated and will be removed in the future.

Even though `import *` at the module level is a frequent source of bugs 
and confusion even for experienced coders, and the usual advice is Just 
Don't Do It, Python does not generate a warning for that case.

> 2. Referencing a global variable before declaring it as such:
> 3. Assigning to a global variable before declaring it as such:

These are insignificant variations of the same act: using a global 
before declaring it. They may have two different error messages, but 
the underlying problem is the same.

> All 3 could easily be left to pylint/pychecker style tools, but were
> deemed worthy of being warned about by the compiler itself.

The first could not, because it is functionality being removed.

The second and third are warning about the same thing, and this is a 
genuine case of Python warning about a stylistic issue.

Steven D'Aprano

More information about the Python-ideas mailing list