2015-04-21 11 views

risposta

9

Si potrebbe mettere il blocco try/except in un altro ciclo e poi rompersi quando ci riesce:

for row in rows: 
    while True: 
     try: 
      something 
      break 
     except Exception: # Try to catch something more specific 
      pass 
+0

non il "pass" fa sì che il ciclo for continui? – user3063864

+0

No, perché è all'interno del ciclo while. Il codice cadrà semplicemente alla fine del blocco 'except' e tornerà all'inizio del ciclo' while'. Nota che potresti anche usare 'continue' se vuoi. – iCodez

+0

Quindi metterei questo prima del vero ciclo del mio ciclo for, e funziona semplicemente fino a quando "qualcosa" non viene confermato, e quindi esegue il "qualcosa" nel mio ciclo for? – user3063864

3

Anche se io non consiglierei che, l'unico modo per farlo è quello di fare un po '(True) loop fino a quando non ottiene something Fatto.

Tenere presente la possibilità di un ciclo infinito.

for row in rows: 
    try: 
     something 
    except: 
     flag = False 
     while not flag: 
      try: 
       something 
       flag = True 
      except: 
       pass 
+0

grazie, questo è davvero utile – Jake

4

Si potrebbe fare le righe un iteratore e solo anticipo quando non v'è alcun errore.

it = iter(rows) 
row = next(it,"") 
while row: 
    try: 
     something 
     row = next(it,"") 
    except: 
     continue 

Una nota a parte, se non siete già mi sorprendevo di errore specifici/errori nel eccezione, non si vuole prendere tutto.

Se avete Falsey valori è possibile utilizzare oggetti come valore di default:

it = iter(rows) 
row, at_end = next(it,""), object() 
while row is not at_end: 
    try: 
     something 
     row = next(it, at_end) 
    except: 
     continue 
+1

Mi sembra più chiaro di "while True:" risponde – kratenko

1

avere il vostro ciclo for all'interno di un infinito ciclo while. Controllare la condizione in cui si desidera riavviare il ciclo for con una condizione if else e interrompere il loop interno. avere una condizione if all'interno del ciclo while che è fuori dal ciclo for per interrompere il ciclo while. Ti piace questa:

while True: 
     for row in rows: 
     if(condition) 
     ..... 
     if(condition) 
     break 
    if(condition) 
    break 
Problemi correlati