Elaborare BrenBarns risposta: break
fortunatamente non si propagherà. break
interromperà il ciclo corrente, punto. Se vuoi propagare un evento, allora devi raise
un'eccezione. Anche se sollevare l'eccezione per interrompere il ciclo è un modo davvero brutto per rompere i loop e un bel modo per violare il codice.
KISS! Il più semplice sarebbe quello di controllare la condizione direttamente nel ciclo
def my_condition(x):
return x == 4
for i in xrange(100):
if my_condition(i): break
print i
Se, per qualche ragione, si desidera propagare un'eccezione, quindi si utilizza in questo modo
# exception example
for i in xrange(100):
if i == 4: raise Exception("Die!")
print i
Come accennato, è a davvero brutto design. Immaginate si dimentica di prendere questa eccezione, o si cambia il tipo da Exception
a MyBreakException
e dimentica di cambiare da qualche parte in alto try/except
parte del codice ...
L'esempio generatore ha i suoi meriti, rende il codice più functional style (che io adoro presonally)
# generator example
def conditional_generator(n, condition):
for i in xrange(n):
if condition(i):
break
else:
yield i
for i in conditional_generator(100, my_condition):
print i
... che è simile a takewhile
, citato da eumiro
fonte
2012-12-21 09:18:45
un generatore che incapsula la logica di interruzione? – ThunderEX
@ThunderEX - qualcosa come 'itertools.takewhile' probabilmente – eumiro
@ThunderEX: Sì, simile a takewhile. Vedi la mia risposta modificata. – BrenBarn