for i in ...:
for j in ...:
for k in ...:
if something:
# continue loop i
В общем случае, когда у вас есть несколько уровней цикла и break
он не работает для вас (потому что вы хотите продолжить один из верхних циклов, а не тот, который находится прямо над текущим), вы можете выполнить одно из следующих
Реорганизуйте циклы, из которых вы хотите выйти, в функцию
def inner():
for j in ...:
for k in ...:
if something:
return
for i in ...:
inner()
Недостатком является то, что вам может потребоваться передать этой новой функции некоторые переменные, которые ранее были в области видимости. Вы можете либо просто передать их как параметры, сделать их экземплярами переменных для объекта (создать новый объект только для этой функции, если это имеет смысл), либо глобальные переменные, синглтоны, что угодно (эхм, эм).
Или вы можете определить inner
как вложенную функцию и позволить ей просто фиксировать то, что ей нужно (может быть медленнее?)
for i in ...:
def inner():
for j in ...:
for k in ...:
if something:
return
inner()
Используйте исключения
С философской точки зрения, это то, для чего нужны исключения, прерывающие выполнение программы через строительные блоки структурированного программирования (если, для, пока), когда это необходимо.
Преимущество заключается в том, что вам не нужно разбивать один фрагмент кода на несколько частей. Это хорошо, если вы проектируете какое-то вычисление, когда пишете его на Python. Введение абстракций на этом раннем этапе может замедлить вас.
Плохая вещь с этим подходом заключается в том, что авторы интерпретаторов / компиляторов обычно предполагают, что исключения являются исключительными, и соответственно оптимизируют их.
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
Создайте для этого специальный класс исключения, чтобы не рисковать случайно отключить какое-либо другое исключение.
Что-то совсем другое
Я уверен, что есть и другие решения.