for i in ...:
for j in ...:
for k in ...:
if something:
# continue loop i
Em geral, quando você tem vários níveis de loop e break
não funciona para você (porque deseja continuar com um dos loops superiores, não aquele logo acima do atual), você pode executar um dos seguintes procedimentos
Refatorar os loops dos quais você deseja escapar para uma função
def inner():
for j in ...:
for k in ...:
if something:
return
for i in ...:
inner()
A desvantagem é que você pode precisar passar para essa nova função algumas variáveis, que estavam anteriormente no escopo. Você pode apenas passá-los como parâmetros, transformá-los em variáveis de instância em um objeto (crie um novo objeto apenas para esta função, se isso fizer sentido) ou variáveis globais, singletons, o que for (ehm, ehm).
Ou você pode definir inner
como uma função aninhada e permitir apenas capturar o que precisa (pode ser mais lento?)
for i in ...:
def inner():
for j in ...:
for k in ...:
if something:
return
inner()
Use exceções
Filosoficamente, é para isso que servem as exceções, interrompendo o fluxo do programa através dos blocos de construção da programação estruturada (se, por, enquanto) quando necessário.
A vantagem é que você não precisa dividir o único pedaço de código em várias partes. Isso é bom se for algum tipo de cálculo que você está projetando enquanto o escreve em Python. A introdução de abstrações nesse ponto inicial pode atrasá-lo.
O lado ruim dessa abordagem é que os autores de intérpretes / compiladores geralmente assumem que as exceções são excepcionais e as otimizam de acordo.
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
Crie uma classe de exceção especial para isso, para não correr o risco de silenciar acidentalmente alguma outra exceção.
Algo completamente diferente
Estou certo de que ainda existem outras soluções.