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

Stefan Rank list-ener at strank.info
Thu Oct 8 11:59:21 CEST 2009


on 2009-10-08 11:24 Yuvgoog Greenle said the following:
> On Thu, Oct 8, 2009 at 10:57 AM, Stefan Rank 
> <list-ener at strank.info 
> <mailto:list-ener at strank.info>> wrote:
> 
>     a suggestion/question related to the discussion about renaming
>     for/else and while/else:
>     Is it easy to generate a SyntaxWarning if you use these constructs
>     without a break or return statement in the loop? AFAICS, any such
>     usage would be either wrong or unnecessary. (right?)
> 
> 
> Your question is good and valid except that "return" has nothing to do 
> with it.
> 
> In order to understand the "else" clause it's better that you think of 
> it as an "if not break" after the loop. Any way you look at it "return" 
> behaves as expected - skips the "else" AND skips all the code that 
> follows (much like "raise" would have). "break" is the only way to skip 
> the "else" clause whilst still executing the code that follows the 
> for/while loop.
> 
> So the only way to the "else" clause is useful is when a "break" can 
> skip it. If there is no "break", you might as well remove the "else" and 
> deindent.

You're right. In the return-but-no-break-example I had in mind::

   def findit(bag):
       for elem in bag:
           if isgreat(elem):
               return elem
       else:
           return default

the use of else, though correct and arguably readable, is still unnecessary.

--strank




More information about the Python-ideas mailing list