[Python-ideas] for/else syntax

Nick Coghlan ncoghlan at gmail.com
Fri Oct 2 13:16:50 CEST 2009


Steven D'Aprano wrote:
> And in fact, it is legal to have for loops without a break but include 
> an else. Is it useful? I don't know, but Python can't forbid them 
> without breaking (pun not intended) code like this:
> 
> for x in xs:
>     if __debug__:
>         break
> else:
>     print "whatever"
> 
> "if __debug__: suite" is special: the Python compiler optimizes the 
> entire suite away when running with the -O flag. So if Python would 
> treat the presence of an else as an error unless there was a break, you 
> could have some code which was, or wasn't, legal according to the 
> presence of the optimize flag. This is clearly a Bad Thing.
> 
> Hence, even if for...else with no breaks are useless, they must be 
> allowed.

A SyntaxWarning should still be OK though - having an else clause that
can only be reached in debug mode is pretty dubious in its own right.

Cheers,
Nick.

-- 
Nick Coghlan   |   ncoghlan at gmail.com   |   Brisbane, Australia
---------------------------------------------------------------



More information about the Python-ideas mailing list