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

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)


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
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.