[Python-ideas] SyntaxWarning for for/while/else without break or return?
masklinn at masklinn.net
Thu Oct 8 12:16:00 CEST 2009
On 8 Oct 2009, at 11:59 , Stefan Rank wrote:
> 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
> return default
> the use of else, though correct and arguably readable, is still
So is it in the following cases:
for elem in bag:
flag = False
for elem in bag:
flag = True
if flag: blow_up()
the point of the SyntaxWarning proposal, as far as I read it, was to
point out that the `else:` clause is only ever useful in the
`for:break else:` case.
So there's no reason to *not* generate a SyntaxWarning if there is a
`return` in the loop if you generate one when there's a `raise`.
More information about the Python-ideas