[Python-Dev] Chaining try statements: eltry? (original) (raw)

Ron Adam rrr at ronadam.com
Fri Jul 8 04:23:36 CEST 2005


Guido van Rossum wrote:

I even wonder if else-clauses on for/while were a good idea. (The one on try is definitely a good idea since the use case is quite frequent and only clumsily handled otherwise; the use cases for else on for/while are less convincing IMO.)

I'm +1 on removing the else from the loops myself.

The else's acts somewhat different depending on weather it's on an if, try, for, or while loop. So it's four somewhat different behaviors for one keyword.

  1. With an if, if you think in terms of flow testing you get the same results as if you look at it in in terms of value testing. Either the if-block will execute or the else-block will, but never any part of one and then the other. A binary solution to a binary problem.

  2. With a try, It's a value test for no exception. Or you could consider it flow test for the try block completing.

  3. In a while loop, it's a value test, where the else block gets executed if the while condition evaluates as false, the while block may or may not execute. You still need a flag to test for that.

  4. In a for loop, it's a test of the iterator completing and generating a StopIteration exception. Which is somewhat implicit. The for block may or may not execute.

For Python 3000 it might be worth taking a look at flow control tests instead of value tests.

With loop flow control testing you have three possible values:

 None:  loop not started
 False: loop started but not completed, ie.. break
 True:  loop completed naturally

 * The current else behavior is an (if not False) test here.

I'm not sure how to test for the condition in a simple way. So it's still a -1 at this point.

As for elif... it works for me. :)

Cheers, Ron



More information about the Python-Dev mailing list