empty clause of for loops
Sven R. Kunze
srkunze at mail.de
Wed Mar 16 14:05:19 EDT 2016
On 16.03.2016 18:08, Random832 wrote:
> Yeah, well, you can *almost* get there with:
>
> try:
> thing = next(item for item in collection if good(item))
> except StopIteration:
> thing = default
>
> But the for/else thing seems like a more natural way to do it. Plus,
> this is a toy example, if the body is more than one statement or doesn't
> involve returning a value comprehensions aren't a good fit.
Sure, YMMV.
What I don't understand is why Python features "if break, then no else
clause", but "if empty, then empty clause".
I found this excellent post:
https://shahriar.svbtle.com/pythons-else-clause-in-loops
The described break-else replacement greatly resembles the answers of
this thread:
condition_is_met = False
for x in data:
if meets_condition(x):
condition_is_met = True
if not condition_is_met:
# raise error or do additional processing
Compared to the proposed empty clause replacement:
empty = True:
for item in items:
empty = False
...
if empty:
...
In order to explain why this might be slightly more important to us than
to other folks: we work in the field of Web development. As humans are
no machines, they usually expect an empty list to be marked as such OR
special actions when lists are not filled as expected.
Even Django ({% empty %}) and jinja ( {% else %}) features this type of
construct. You might think it's enough when template engines work this
way (the output layer). However, I quite regularly could find this
useful within the logic part (the actions) of our applications.
Do you think this would be worth posting on python-ideas?
Best,
Sven
More information about the Python-list
mailing list