Behavior of the for-else construct

Schachner, Joseph Joseph.Schachner at Teledyne.com
Thu Mar 3 12:25:54 EST 2022


Useful:  On rare occasions (when a loop has a "break" in it)
Used: Yes
Know how it works:  Yes
Even is such a thing: Yes
Your suggestion:   Also useful.  Will require a different keyword.   I don't know what that would be. "finally" is available 😊  Write up a feature request.

--- Joseph S.


Teledyne Confidential; Commercially Sensitive Business Data

-----Original Message-----
From: computermaster360 <computermaster360 at gmail.com> 
Sent: Thursday, March 3, 2022 8:24 AM
To: python-list at python.org
Subject: Behavior of the for-else construct

I want to make a little survey here.

Do you find the for-else construct useful? Have you used it in practice? Do you even know how it works, or that there is such a thing in Python?

I have used it maybe once. My issue with this construct is that calling the second block `else` doesn't make sense; a much more sensible name would be `then`.

Now, imagine a parallel universe, where the for-else construct would have a different behavior:

    for elem in iterable:
        process(elem)
    else:
        # executed only when the iterable was initially empty
        print('Nothing to process')

Wouldn't this be more natural? I think so. Also, I face this case much more often than having detect whether I broke out of a loop early (which is what the current for-else construct is for).

Now someone may argue that it's easy to check whether the iterable is empty beforehand. But is it really? What if it's an iterator?
Then one would have to resort to using a flag variable and set it in each iteration of the loop. An ugly alternative would be trying to retrieve the first element of the iterable separately, in a try block before the for-loop, to find out whether the iterable is empty. This would of course require making an iterator of the iterable first (since we can't be sure it is already an iterator), and then -- if there are any elements
-- processing
the first element separately before the for-loop, which means duplicating the loop body. You can see the whole thing gets really ugly really quickly...

What are your thoughts? Do you agree? Or am I just not Dutch enough...?


More information about the Python-list mailing list