for i in ...:
for j in ...:
for k in ...:
if something:
# continue loop i
En un caso general, cuando tiene múltiples niveles de bucle y break
no funciona para usted (porque desea continuar uno de los bucles superiores, no el que está justo encima del actual), puede hacer uno de los siguientes
Refactorice los bucles de los que desea escapar a una función
def inner():
for j in ...:
for k in ...:
if something:
return
for i in ...:
inner()
La desventaja es que es posible que deba pasar a esa nueva función algunas variables, que anteriormente estaban en el alcance. Puede pasarlos como parámetros, convertirlos en variables de instancia en un objeto (crear un nuevo objeto solo para esta función, si tiene sentido) o variables globales, singletons, lo que sea (ehm, ehm).
O puede definir inner
como una función anidada y dejar que solo capture lo que necesita (¿puede ser más lento?)
for i in ...:
def inner():
for j in ...:
for k in ...:
if something:
return
inner()
Use excepciones
Filosóficamente, esto es para lo que se hacen excepciones, rompiendo el flujo del programa a través de los bloques de construcción de la programación estructurada (si es, por, mientras) cuando sea necesario.
La ventaja es que no tiene que dividir el código único en varias partes. Esto es bueno si es algún tipo de cálculo que está diseñando mientras lo escribe en Python. Introducir abstracciones en este punto temprano puede ralentizarlo.
Lo malo de este enfoque es que los autores de intérpretes / compiladores generalmente asumen que las excepciones son excepcionales y las optimizan en consecuencia.
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
Cree una clase de excepción especial para esto, de modo que no corra el riesgo de silenciar accidentalmente alguna otra excepción.
Algo completamente diferente
Estoy seguro de que todavía hay otras soluciones.