Python: z wyjątkiem jednej próby wielu

197

Czy w Pythonie można mieć wiele exceptinstrukcji dla jednej tryinstrukcji? Jak na przykład :

try:
 #something1
 #something2
except ExceptionType1:
 #return xyz
except ExceptionType2:
 #return abc
Eva611
źródło
7
@ Eva611: Nie przepraszaj. (1) spróbuj. (2) opublikuj odpowiedź na swoje pytanie.
S.Lott
6
To działa. Wypróbowałem to za pomocą interpretera python ...
Eva611
38
@ Eva611 Myślę, że twoje pytanie było w porządku. To było dla mnie znacznie szybsze niż Google, zamiast ustawiania przykładu w interprecie Pythona, więc byłem szczęśliwy, że o to poprosiłeś. DrTysa i inni powinni po prostu odpowiedzieć szybkim „tak” zamiast karcić cię.
galarant
5
Przez większość czasu twoje pierwsze przypuszczenia będą błędne lub przeoczą subtelne niuanse, więc (jak 15 000 innych) najpierw spróbowałem google!
Chris
9
Próbowałem google i znalazłem to pytanie. Dlatego cieszę się, że ktoś inny zadał to pytanie na tak publicznym forum, jak SO, i cieszę się, że inne osoby z nim powiązane, że algorytm google pojawił się jako mój pierwszy wynik.
kingledion

Odpowiedzi:

331

Tak to mozliwe.

try:
   ...
except FirstException:
   handle_first_one()

except SecondException:
   handle_second_one()

except (ThirdException, FourthException, FifthException) as e:
   handle_either_of_3rd_4th_or_5th()

except Exception:
   handle_all_other_exceptions()

Zobacz: http://docs.python.org/tutorial/errors.html

Słowo kluczowe „as” służy do przypisania błędu do zmiennej, dzięki czemu można dokładniej zbadać błąd w kodzie. Zauważ też, że nawiasy dla potrójnego przypadku wyjątku są potrzebne w Pythonie 3. Ta strona zawiera więcej informacji: Złap wiele wyjątków w jednym wierszu (oprócz bloku)

vartec
źródło
76
Jeśli chcesz zrobić to samo w obu przypadkach, jest to except (SomeError, OtherError):. Nie odpowiada na pytanie OP, ale może pomóc niektórym osobom, które dostaną się tutaj przez Google.
Mark
Jeśli na przykład musisz przekonwertować wiele wersji struktury danych do nowej struktury, na przykład podczas aktualizacji wersji kodu możesz zagnieździć try..excepts.
Rolf z Saksonii
5
Jeśli chcesz obsłużyć wszystkie wyjątki, powinieneś używać except Exception:zamiast zwykłego except:. (Zwykły, z wyjątkiem, że złapie nawet, SystemExita KeyboardInterruptktóry zwykle nie jest tym, czego chcesz)
polvoazul
Być może chcesz coś zrobić erównież, ponieważ
nadajesz