Behavior of the for-else construct

Rob Cliffe rob.cliffe at btinternet.com
Thu Mar 3 11:44:28 EST 2022


It has occasional uses (I THINK I've used it myself) but spelling it 
`else` is very confusing.  So there have been proposals for an 
alternative spelling, e.g. `nobreak`.
There have also been suggestions for adding other suites after `for', e.g.
     if the loop WAS exited with `break`
     if the loop was executed zero times
but these have not been accepted.
Best wishes
Rob Cliffe

On 03/03/2022 13:24, computermaster360 wrote:
> 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