for i in ...:
for j in ...:
for k in ...:
if something:
# continue loop i
Im Allgemeinen können Sie eine der folgenden Aktionen ausführen, wenn Sie mehrere Schleifenebenen haben und break
für Sie nicht funktionieren (weil Sie eine der oberen Schleifen fortsetzen möchten, nicht die direkt über der aktuellen)
Refaktorieren Sie die Schleifen, aus denen Sie entkommen möchten, in eine Funktion
def inner():
for j in ...:
for k in ...:
if something:
return
for i in ...:
inner()
Der Nachteil ist, dass Sie möglicherweise einige Variablen an diese neue Funktion übergeben müssen, die zuvor im Gültigkeitsbereich waren. Sie können sie entweder einfach als Parameter übergeben, als Instanzvariablen für ein Objekt festlegen (ein neues Objekt nur für diese Funktion erstellen, wenn dies sinnvoll ist) oder als globale Variablen, Singletons (ehm, ehm).
Oder Sie können inner
eine verschachtelte Funktion definieren und sie nur erfassen lassen, was sie benötigt (möglicherweise langsamer?)
for i in ...:
def inner():
for j in ...:
for k in ...:
if something:
return
inner()
Verwenden Sie Ausnahmen
Philosophisch gesehen sind dies Ausnahmen, die den Programmfluss durch die strukturierten Programmierbausteine (wenn, für, während) bei Bedarf unterbrechen.
Der Vorteil ist, dass Sie den einzelnen Code nicht in mehrere Teile aufteilen müssen. Dies ist gut, wenn es sich um eine Art Berechnung handelt, die Sie beim Schreiben in Python entwerfen. Das Einführen von Abstraktionen an diesem frühen Punkt kann Sie verlangsamen.
Das Schlechte an diesem Ansatz ist, dass Interpreter / Compiler-Autoren normalerweise davon ausgehen, dass Ausnahmen außergewöhnlich sind, und sie entsprechend optimieren.
class ContinueI(Exception):
pass
continue_i = ContinueI()
for i in ...:
try:
for j in ...:
for k in ...:
if something:
raise continue_i
except ContinueI:
continue
Erstellen Sie hierfür eine spezielle Ausnahmeklasse, damit Sie nicht versehentlich eine andere Ausnahme stumm schalten.
Etwas ganz anderes
Ich bin sicher, dass es noch andere Lösungen gibt.