In Python kun je else niet alleen na if schrijven, maar ook na de loops for en while. Het lichaam van else wordt alleen uitgevoerd wanneer de loop op een 'normale' manier is beëindigd — niet door break. Dit maakt het elegant mogelijk om bijvoorbeeld een element te zoeken.
Voorbeeld:
for x in range(5): if x == 3: print('break!') break else: print('Loop beëindigd zonder break') # zal niet worden uitgevoerd
for x in range(5): if x == 10: break else: print('Loop beëindigd zonder break') # zal worden uitgevoerd
Deze functie wordt vaak gebruikt voor "zoeken zonder succes": als break niet heeft plaatsgevonden, betekent dit dat het element niet is gevonden.
Wordt het else-blok in de loop altijd uitgevoerd als de loop eindigt? Wat als de loop leeg was?
Antwoord: Ja, als er geen break was, zal else altijd worden uitgevoerd, zelfs als de loop nooit het lichaam is binnengegaan:
for x in []: print('niks') else: print('else!') # dit zal worden afgedrukt
Verhaal
Project: Documentparser.
Probleem: We zochten een sleutel in een lijst en zetten na de loop een vlag "not found" buiten else. Dit resulteerde in onjuiste detectie van het element als break niet werd geactiveerd.
Verhaal
Project: Generatie van unieke tokens.
Probleem: De logica van het genereren van een token was afhankelijk van een correcte uitgang via break, en else werd ten onrechte beschouwd als een "bijzonder geval", terwijl deze in 99% van de uitvoeringen werd geactiveerd, wat de logica van gebruikersauthenticatie verstoorde.
Verhaal
Project: Testscript voor een netwerk-API.
Probleem: Vanwege een verkeerd begrip van else na while gebruikten we het voor het afhandelen van timeouts, terwijl de loop niet door break eindigde, en timeouts werden niet gevangen, wat leidde tot 'stille' fouten in de tests.