The controversial for...else statement in Python
Among all the great features Python has to offer, the
for...else statement is one of my favorites. However, when I talk about it, it seems that people do not really see the point of it. I'll show you what it does, how to use it and, more importantly, how not to use it.
In a loop, the
else clause is executed at the end of the loop if it hasn't been terminated by a
return or an exception. Note that it will also be executed even if the body of the loop was never entered (e.g. iteration over an empty list). Here's a simple example from the official documentation, feel free to play with the code.
Without using the
else statement, the easy solution would be to use a variable and test the variable at the end of the loop:
Actually, when I feel the need of a
for-else, the pattern is always the same:
found = False for x in l: if check_condition(x): do_something(x) found = True break if not found: do_something_else()
for x in l: if check_condition(x): do_something(x) break else: do_something_else()
The main argument against the use of the
for-else structure is the possible lack of code readability. For instance, people may believe that the
else belongs to the
if instead of the
for. As a consequence, I'd recommend to seek for an alternative solution when possible.
In the first example, you could use a generator:
And in a lot of cases, you can use
if any(check_condition(x) for x in l): do_something() else: do_something_else()