1.5.2 for: else:

William Tanksley wtanksle at dolphin.openprojects.net
Sun Aug 1 02:13:47 CEST 1999


On Sat, 31 Jul 1999 01:15:54 -0400, Tim Peters wrote:
>[William Tanksley]

>> Oh, and if you REALLY like the current behavior of else-loop, you can
>> still have it if else-loop were gone -- like this:

>> try:
>>  for x in list:
>>    if iffers(x): raise "no!"
>>    yadda(x)
>> except "no!": pass
>> else:
>>  twiddle()

>> That's two extra lines, and one level of nesting -- for the _exact_ same
>> functionality, only much more likely to be comprehended.

>Except that when I see that loop, I'm at a loss to guess whether the
>"except" clause is intended to catch otherwise-uncaught "no!" exceptions
>raised by list.__getitem__, iffers(), and yadda() too.  Presumably the
>intent is that it should not, but there's no easy way to stop it from
>catching unintended stuff too short of defining a unique exception for each
>loop.  for+break+else doesn't have this problem.

Very good point, Tim.

The best solution of all is to simply not use features of the language
which I find objectionable for whatever reason.  I'm just disappointed in
the odd definition of for-else.  I'm glad to have learned it this way
rather than by painful debugging, and I don't think any of us are likely
to forget now :).

Memo to self -- don't use for-else, it doesn't do what it looks like it's
doing.

-- 
-William "Billy" Tanksley




More information about the Python-list mailing list