Duplicar posibles:
How to break out of multiple loops in Python?romper dos bucles for
es posible salir de dos para bucles en Python?
decir
for i in range(1,100):
for j in range(1,100):
break ALL the loops!
Duplicar posibles:
How to break out of multiple loops in Python?romper dos bucles for
es posible salir de dos para bucles en Python?
decir
for i in range(1,100):
for j in range(1,100):
break ALL the loops!
No, no hay anidada break
declaración en Python.
su lugar, puede simplificar su función, así:
import itertools
for i,j in itertools.product(range(1, 100), repeat=2):
break
.. o poner el código en su propia función, y utilizar return
:
def _helper():
for i in range(1,100):
for j in range(1,100):
return
_helper()
.. o utilizar una excepción :
class BreakAllTheLoops(BaseException): pass
try:
for i in range(1,100):
for j in range(1,100):
raise BreakAllTheLoops()
except BreakAllTheLoops:
pass
.. o el uso para-otro-continuar:
for i in range(1,100):
for j in range(1,100):
break
else:
continue
break
.. o utilizar una variable bandera:
exitFlag = False
for i in range(1,100):
for j in range(1,100):
exitFlag = True
break
if exitFlag:
break
Otra opción que falta, la [for/else/continue] (http://stackoverflow.com/a/3150107/505154). –
@ F.J Agregado, gracias. Me preocupa un poco la duplicación, pero esta pregunta parece más fácil de leer que la anterior. – phihag
no No se puede especificar el número de bucles se rompa. Ponga su código en una función y use return
.
Otra opción: utilizar una variable debandera en el bucle interno y ponerlo a True
cuando se utiliza break
. Luego úsela para break
en el bucle externo. Se propusieron
for i in range(1,100):
breaking = false
for j in range(1,100):
if foundAReasonToBreak:
breaking = true
break
if breaking:
break
varias soluciones en PEP 3136, pero el BDFL rejected it:
estoy rechazarla sobre la base de que el código tan complicado de esta característica requiere es muy raro. En la mayoría de los casos, existen soluciones temporales que producen código limpio, por ejemplo, usando 'return'. Aunque estoy seguro de hay algunos (raros) casos reales donde la claridad del código sería sufrir de una refactorización que hace posible el uso de retorno, esto se compensa con dos cuestiones:
La complejidad agregado al lenguaje, permanentemente. Esto afecta no solo a todas las implementaciones de Python, sino también a todas las herramientas de análisis de fuentes, además de toda la documentación del lenguaje.
Mi expectativa de que la característica se abusará más de lo que se utilizará correctamente, lo que lleva a una disminución neta en la claridad del código (medida en todos los códigos Python escritos a partir de ahora). Los programadores perezosos están en todas partes, y antes de que te des cuenta tienes un desorden increíble en tus manos del código ininteligible .
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"
Esto es un poco desagradable pero parece lograr lo que estás pidiendo.
Editar: Veo que @phihag publicó algo similar a como estaba experimentando.
No utilice excepciones existentes para casos que no son los mismos para los que se diseñó originalmente la excepción. Crea tu propio. – Marian
Consulte PEP 3136: http://www.python.org/dev/peps/pep-3136/ – robert