Photo by Kelly Sikkema on Unsplash
Not everyone knows, but there is an "else" clause for For loops.
I often see this:
did_something = False
for element in elements:
if element.something:
do_something()
did_something = True
break
if not did_something:
do_something_else()
But it should be like this:
for element in elements:
if element.something:
do_something()
break
else:
do_something_else()
Else clause executes only if the for loop exits naturally, without any break statements. That simple.
Top comments (2)
Kind of cool, but I think it would be more readable to separate the loop into its own function, returning true if element.something and returning false otherwise after looping thru. It would be much less confusing to look at, IMO.
It's no intuitive to me. I need to check documentation again every time encountered this to understand what it supposed to mean, which is a bad sign for language feature. Imagine having to check docs every time you encounter
if ... else
.Jinja also has
for ... else
construct but theelse
will be executed if the loop not executed, like when the list is empty. This is intuitive to me, as it similar to howif ... else
work. Either the primary block executed, or theelse
.