ProgrammatiePython Backend/Junior ontwikkelaar

Leg de subtiliteiten uit van loops en de operators break/continue/else in Python. Hoe werkt else in een loop?

Slaag voor sollicitatiegesprekken met de Hintsage AI-assistent

Antwoord.

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.

Vraag met een valkuil.

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

Voorbeelden van echte fouten door gebrek aan kennis van de subtiliteiten van het onderwerp.


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.