[Python-Dev] Chaining try statements: eltry?

BJörn Lindqvist bjourne at gmail.com
Mon Jul 11 11:07:07 CEST 2005


> > I surely find them useful, and see them as a Python originality (a
> > welcome one).
> 
> They are indeed an original invention. (One day I looked at the
> similarity between if and while and noticed that there was a use case
> for else after while too.)
> 
> The question remains whether Python would be easier to learn without
> them. And if so, the question would remain whether that's offset by
> their utility for experienced developers. All hard to assess
> impartially!

I dislike them because I can never read looping constructs with else:
without thinking hard about what it does. Like:

for x in alist:
    if x == "foo":
        break
else:
    print "foo was not found."

Is a better way of doing:

found = False
for x in alist:
    if x == "foo":
        found = True
        break
if not found:
    print "foo was not found."

So the else: is taken if the break wasn't executed. I think that is
hard to grasp because it makes the for and break into a kind of
conditional statement where break makes it evalute to true. But I
think the best way to code this silly example is to write:

def finder():
    for x in alist:
        if x == "foo":
            return True
    return False
if not finder():
    print "foo was not found."

Which is how I write when someone else might had used a "else." So
IMHO, the use cases are weak. It's also confusing that try: has a
different kind of else. "else" in "try" is a good thing - no exception
occured. "else" in a for/while is (usually) a bad thing - as item was
not found.

-- 
mvh Björn


More information about the Python-Dev mailing list