Pomijanie iteracji w Pythonie

159

Trwa pętla, ale istnieje możliwość wywołania wyjątków wewnątrz pętli. To oczywiście zatrzymałoby cały mój program. Aby temu zapobiec, wyłapuję wyjątki i obsługuję je. Ale potem reszta iteracji przebiega, mimo że wystąpił wyjątek. Czy w mojej except:klauzuli znajduje się słowo kluczowe, które pomija resztę bieżącej iteracji?

The.Anti.9
źródło
4
Nie widzę, w jaki sposób zaakceptowana odpowiedź (użyj continue) łapie wyjątki, ale została zaakceptowana. Dlatego pytanie jest naprawdę zagmatwane.
S.Lott
@ S.Lott Nie potrzebuję słowa kluczowego, aby wyłapać wyjątek, mówiłem tylko o ogólnym przepływie całego kodu.
The.Anti.9
@ The.Anti.9. Co? Najpierw powiedziałeś „Chcę złapać wyjątki”. Teraz mówisz „Nie potrzebuję słowa kluczowego, aby złapać wyjątek”. Czy mógłbyś to w jakiś sposób wyjaśnić?
S.Lott
1
@ S.Lott. Nie muszę łapać wyjątku za pomocą słowa kluczowego, po prostu musi być próba, z wyjątkiem instrukcji w kodzie ....
The.Anti.9
1
Przeformułowałem pytanie, aby lepiej pasowało do zaakceptowanej odpowiedzi.
jilles de wit

Odpowiedzi:

381

Szukasz kontynuacji .

André
źródło
31
To musi być jedna z najbardziej zwięzłych odpowiedzi SO, jakie widziałem!
Austin A
70
Prawdziwe pytanie: czy opuszcza „g” w „lookin” Pythonic?
Mason Gardner
50
for i in iterator:
    try:
        # Do something.
        pass
    except:
        # Continue to next iteration.
        continue
Alex McBride
źródło
17

Coś takiego?

for i in xrange( someBigNumber ):
    try:
        doSomethingThatMightFail()
    except SomeException, e:
        continue
    doSomethingWhenNothingFailed()
S.Lott
źródło
1
Zmieniono tak, by zamiast przejść dalej, było używać kontynuacji.
jilles de wit
16

Przykład kontynuacji:

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')

Wynik:

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
Jesu Kiran Spurgen
źródło
5

W tym konkretnym przypadku użycia użycie try..except..elsejest najczystszym rozwiązaniem, elseklauzula zostanie wykonana, jeśli nie zostanie zgłoszony żaden wyjątek.

UWAGA: elseKlauzula musi być zgodna ze wszystkimi exceptklauzulami

for i in iterator:
    try:
        # Do something.
    except:
        # Handle exception
    else:
        # Continue doing something
Istvan Jeno Veres
źródło