ProgrammierungPython Backend/Junior Entwickler

Erklären Sie die Feinheiten der Funktionsweise von Schleifen und den Operatoren break/continue/else in Python. Wie funktioniert else in der Schleife?

Bestehen Sie Vorstellungsgespräche mit dem Hintsage-KI-Assistenten

Antwort.

In Python kann man else nicht nur nach if, sondern auch nach den Schleifen for und while schreiben. Der Körper von else wird nur ausgeführt, wenn die Schleife "normal" beendet wurde — nicht durch break. Das ermöglicht eine elegante Implementierung, zum Beispiel die Suche nach einem Element.

Beispiel:

for x in range(5): if x == 3: print('break!') break else: print('Die Schleife wurde ohne break beendet') # wird nicht ausgeführt
for x in range(5): if x == 10: break else: print('Die Schleife wurde ohne break beendet') # wird ausgeführt

Dieses Feature wird oft verwendet, um "erfolglose Suchen" zu realisieren: Wenn kein break auftritt, wurde das Element nicht gefunden.

Fangfrage.

Wird der else-Block der Schleife immer ausgeführt, wenn die Schleife beendet wird? Was ist, wenn die Schleife leer war?

Antwort: Ja, wenn kein break aufgetreten ist, wird else immer ausgeführt, auch wenn die Schleife nie in den Körper eingetreten ist:

for x in []: print('nichts') else: print('else!') # das wird ausgegeben

Beispiele für reale Fehler aufgrund mangelnden Wissens über die Feinheiten des Themas.


Geschichte

Projekt: Dokumentenparser.

Problem: Wir haben nach einem Schlüssel in einer Liste gesucht und nach der Schleife ein Flag "not found" außerhalb von else gesetzt. Infolgedessen funktionierte die Erkennung des Elements nicht korrekt, wenn break nicht ausgelöst wurde.


Geschichte

Projekt: Generierung einzigartiger Token.

Problem: Die Logik zur Generierung des Tokens hing davon ab, dass korrekt durch break ausgegangen wurde, und else wurde fälschlicherweise als "außergewöhnlicher Fall" betrachtet, obwohl es in 99 % der Ausführungen eintrat, was die Benutzerautorisierung logik störte.


Geschichte

Projekt: Testscript für ein Netzwerk-API.

Problem: Aufgrund eines falschen Verständnisses von else nach while wurde es zur Verarbeitung von Zeitüberschreitungen verwendet, obwohl die Schleife nicht durch break beendet wurde, und die Zeitüberschreitungen wurden nicht erfasst, was zu "stillen" Fehlern in den Tests führte.