Saltare le iterazioni in Python


159

Ho un ciclo attivo, ma esiste la possibilità che vengano sollevate eccezioni all'interno del ciclo. Questo ovviamente fermerebbe il mio programma tutti insieme. Per evitare ciò, colgo le eccezioni e le gestisco. Ma poi il resto dell'iterazione viene eseguito anche se si è verificata un'eccezione. C'è una parola chiave da usare nella mia except:clausola per saltare il resto dell'iterazione corrente?


4
Non vedere in che modo la risposta accettata (uso continue) rileva eccezioni, ma è stata accettata. Pertanto, la domanda è davvero molto confusa.
S. Lott,

@ S. Lott Non ho bisogno della parola chiave per catturare l'eccezione, stavo solo parlando del flusso generale del codice totale.
The.Ati.9

@ The.Anti.9. Che cosa? Prima hai detto "Voglio cogliere le eccezioni". Ora stai dicendo "Non ho bisogno della parola chiave per catturare l'eccezione". Potresti chiarire questo in qualche modo?
S. Lott,

1
@ S. Lott. Non ho bisogno di cogliere l'eccezione con la parola chiave, ci deve solo essere un tentativo, tranne l'istruzione nel codice ....
The.Anti.9

1
Ho riformulato la domanda per adattarla meglio alla risposta accettata.
jilles de wit,

Risposte:



50
for i in iterator:
    try:
        # Do something.
        pass
    except:
        # Continue to next iteration.
        continue

17

Qualcosa come questo?

for i in xrange( someBigNumber ):
    try:
        doSomethingThatMightFail()
    except SomeException, e:
        continue
    doSomethingWhenNothingFailed()

1
Modificato per l'uso continua anziché passare.
jilles de wit,

16

Esempio per continuare:

number = 0

for number in range(10):
   number = number + 1

   if number == 5:
      continue    # continue here

   print('Number is ' + str(number))

print('Out of loop')

Produzione:

Number is 1
Number is 2
Number is 3
Number is 4
Number is 6 # Note: 5 is skipped!!
Number is 7
Number is 8
Number is 9
Number is 10
Out of loop


5

Per questo caso d'uso specifico l'utilizzo try..except..elseè la soluzione più pulita, la elseclausola verrà eseguita se non è stata sollevata alcuna eccezione.

NOTA: la elseclausola deve seguire tutte le exceptclausole

for i in iterator:
    try:
        # Do something.
    except:
        # Handle exception
    else:
        # Continue doing something
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.