Duplicaté possible: strong>
Comment sortir de plusieurs boucles dans Python? p>Est-il possible de sortir de deux
pour forts> boucles en python?
I.e. P>for i in range(1,100): for j in range(1,100): break ALL the loops!
6 Réponses :
Non, il n'y a pas de déclaration code> nichée code> dans Python.
Au lieu de cela, vous pouvez simplifier votre fonction, comme ceci: p> .. Ou placez le code dans sa propre fonction et utilisez .. ou utilisez une exception: p> retour code>: p> exitFlag = False
for i in range(1,100):
for j in range(1,100):
exitFlag = True
break
if exitFlag:
break
Une autre option qui manque, le pour / Ça / Continuer .
@ F.J ajouté, merci. Je m'inquiète un peu de la duplication, mais cette question semble plus facile à lire que l'ancien.
Non, vous ne pouvez pas spécifier combien de boucles à casser. Placez votre code dans une fonction et utilisez retour code>. P>
Une autre option: Utilisez un drapeau fort> variable dans la boucle interne et définissez-le sur true code> lorsque vous utilisez break code>. Ensuite, utilisez-le pour break code> la boucle extérieure. P>
for i in range(1,100):
breaking = false
for j in range(1,100):
if foundAReasonToBreak:
breaking = true
break
if breaking:
break
Plusieurs solutions ont été proposées dans PEP 3136 , mais le BDFL rejeté : p>
Je l'ai rejeté sur la base du code si compliqué pour exiger cela la fonctionnalité est très rare. Dans la plupart des cas, il y a des travaux existants qui produisent un code de nettoyage, par exemple en utilisant «retour». Pendant que je suis sûr Il y a des cas (rares) réels où la clarté du code serait souffrir d'un refactoring qui permet d'utiliser le retour, cela est compensé par deux questions: p>
La complexité ajoutée à la langue, en permanence. Cela affecte non seulement toutes les implémentations de Python, mais également tous les outils d'analyse source, plus bien sûr toute la documentation pour la langue. P> li>
Je m'attends à ce que la fonctionnalité soit abusée plus qu'elle ne sera utilisée à droite, entraînant une diminution nette de la clarté du code (mesurée à travers Tout le code Python écrit désormais). Les programmeurs paresseux sont partout, et avant de le savoir, vous avez un incroyable gâchis sur vos mains de Code inintelligible. P> LI> ol> blockQuote>
try:
for i in range(1,10):
print i
for j in range(1,10):
if j == 5: raise AssertionError
print j
except AssertionError:
pass
print "I'm free"
This is a little distasteful but it does seem to accomplish what you're asking.Edit: I see @phihag posted something similar as I was experimenting.
N'utilisez pas d'exceptions existantes pour les cas qui ne sont pas identiques au tout, à l'origine de l'exception. Crée le tien.
Voir Pep 3136: python.org/dev/peps/pep-3136