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?


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:



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

17

Coś takiego?

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

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


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
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.