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

Jacob Holm jh at improva.dk
Thu Oct 8 16:10:20 CEST 2009


Gerald Britton wrote:
> re warnings: The compiler is simply not smart enough to know if a
> program is doing what a programmer wants.  If a given program is
> working quietly according to its specifications, we should do nothing
> to disturb the peace.

If the code is written using a style that is misleading, I think it 
makes sense to issue a warning.
> 
> re syntax: There are at least three ways to exit a for-loop early:
> break, return and raise (explicit or implicit).  Would this code
> generate a warning? (I hope not)
> 
> for x in y:
>   if found_what_I_want(x):
>     return True
> else:
>   return False

This would generate a warning, because the 'else' is unnecessary and 
potentially confusing here.  The above code is exactly equivalent to:

   for x in y:
     if found_what_I_want(x):
       return True
   return False

> 
> or this?
> 
> for a in b:
>   if bogus(a):
>      raise Bogus, "Found a bad one"
> else:
>   nothing_bogus_found()
> 

Would also generate a warning.  Again, the version without 'else':

   for a in b:
     if bogus(a):
       raise Bogus, "Found a bad one"
   nothing_bogus_found()


In both cases, I find the version without 'else' to be easier to understand.

+1 to making for/else and while/else without break generate a warning.
+0 to making it an error.
-1 to removing or renaming the 'else' of for and while loops.

- Jacob



More information about the Python-ideas mailing list