for i in ...:
for j in ...:
for k in ...:
if something:
# continue loop i
Dans un cas général, lorsque vous avez plusieurs niveaux de bouclage et break
cela ne fonctionne pas pour vous (parce que vous voulez continuer une des boucles supérieures, pas celle juste au-dessus de la boucle actuelle), vous pouvez effectuer l'une des opérations suivantes
Refactoriser les boucles dont vous souhaitez vous échapper dans une fonction
def inner():
for j in ...:
for k in ...:
if something:
return
for i in ...:
inner()
L'inconvénient est que vous devrez peut-être passer à cette nouvelle fonction certaines variables, qui étaient auparavant dans la portée. Vous pouvez soit simplement les passer en tant que paramètres, en faire des variables d'instance sur un objet (créer un nouvel objet juste pour cette fonction, si cela a du sens), ou des variables globales, des singletons, peu importe (ehm, ehm).
Ou vous pouvez définir inner
comme fonction imbriquée et la laisser capturer simplement ce dont elle a besoin (peut-être plus lente?)
for i in ...:
def inner():
for j in ...:
for k in ...:
if something:
return
inner()
Utiliser des exceptions
Philosophiquement, c'est à cela que servent les exceptions, interrompant le flux du programme à travers les blocs de construction de programmation structurée (si, pendant, pendant) lorsque cela est nécessaire.
L'avantage est que vous n'avez pas à diviser le morceau de code en plusieurs parties. C'est bien s'il s'agit d'une sorte de calcul que vous concevez en l'écrivant en Python. Introduire des abstractions à ce stade précoce peut vous ralentir.
La mauvaise chose avec cette approche est que les auteurs d'interprètes / compilateurs supposent généralement que les exceptions sont exceptionnelles et optimisées pour elles en conséquence.
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
Créez une classe d'exception spéciale pour cela, afin de ne pas risquer de faire taire accidentellement une autre exception.
Quelque chose d'autre entièrement
Je suis sûr qu'il existe encore d'autres solutions.