In Python, you can write else not only after if but also after for and while loops. The body of else is executed only when the loop finishes in a "normal" way — not due to break. This elegantly allows, for example, searching for an element.
Example:
for x in range(5): if x == 3: print('break!') break else: print('Loop completed without break') # will not execute
for x in range(5): if x == 10: break else: print('Loop completed without break') # will execute
This feature is often used for "unsuccessful search": if break did not occur, it means the element was not found.
Does the else block of the loop always execute if the loop finishes? What if the loop was empty?
Answer: Yes, if there was no break, else will always execute, even if the loop never entered the body:
for x in []: print('nothing') else: print('else!') # this will be printed
Story
Project: Document parser.
Problem: Searched for a key in a list, and placed a "not found" flag outside of else after the loop. As a result, element detection worked incorrectly if break did not occur.
Story
Project: Generation of unique tokens.
Problem: The logic of token generation depended on correct exiting via break, and else was mistakenly considered an "exceptional case", whereas it actually triggered in 99% of executions, breaking the user authentication logic.
Story
Project: Testing script for network API.
Problem: Due to misunderstanding of else after while, it was used for handling timeouts, although the loop did not finish due to break, and timeouts were not caught, leading to "silent" errors in tests.