for i in ...:
for j in ...:
for k in ...:
if something:
# continue loop i
In un caso generale, quando hai più livelli di loop e breaknon funziona per te (perché vuoi continuare uno dei loop superiori, non quello proprio sopra quello corrente), puoi fare una delle seguenti
Rifattorizza i loop da cui vuoi fuggire in una funzione
def inner():
for j in ...:
for k in ...:
if something:
return
for i in ...:
inner()
Lo svantaggio è che potrebbe essere necessario passare a quella nuova funzione alcune variabili, che erano in precedenza nell'ambito. Puoi semplicemente passarli come parametri, renderli variabili di istanza su un oggetto (creare un nuovo oggetto solo per questa funzione, se ha senso), oppure variabili globali, singoli punti, qualunque cosa (ehm, ehm).
Oppure puoi definire inneruna funzione nidificata e lasciare che catturi solo ciò di cui ha bisogno (potrebbe essere più lento?)
for i in ...:
def inner():
for j in ...:
for k in ...:
if something:
return
inner()
Usa le eccezioni
Filosoficamente, ecco a cosa servono le eccezioni, interrompendo il flusso del programma attraverso i blocchi di programmazione strutturati (se, per, mentre) quando necessario.
Il vantaggio è che non è necessario suddividere il singolo pezzo di codice in più parti. Questo è utile se è un tipo di calcolo che stai progettando mentre lo scrivi in Python. L'introduzione di astrazioni a questo punto iniziale può rallentare.
La cosa negativa di questo approccio è che gli autori di interpreti / compilatori di solito assumono che le eccezioni siano eccezionali e ottimizzino di conseguenza per loro.
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
Crea una speciale classe di eccezione per questo, in modo da non rischiare di mettere a tacere accidentalmente un'altra eccezione.
Qualcos'altro del tutto
Sono sicuro che ci sono ancora altre soluzioni.