Python: Одноразово спробуйте скористатись кількома


199

У Python чи можливо мати кілька exceptоператорів для одного tryоператора? Як от :

try:
 #something1
 #something2
except ExceptionType1:
 #return xyz
except ExceptionType2:
 #return abc

7
@ Eva611: Не вибачайтеся. (1) спробуйте. (2) опублікуйте відповідь на своє запитання.
С.Лотт

6
Це справді працює. Спробував це з інтерпретатором пітона ...
Eva611,

39
@ Eva611 Я думаю, що ваше питання було нормальним. Це було набагато швидше для мене в Google, а не на прикладі інтерпретатора Python, тому я був радий, що ви запитали. DrTysa та інші повинні були просто відповісти швидким «так», а не лаяти вас.
галарант

5
Більшість випадків ваша перша здогадка буде помилятися або пропускати тонкі нюанси, тому (як і 15 000 інших) я спершу спробував google!
Кріс

9
Я спробував google і знайшов це питання. Тому я радий, що хтось інший запитав це на такому публічному форумі, як ТАК, і я радий, що достатньо інших людей, пов’язаних із ним, що алгоритм google вискакував це як мій перший результат.
kingledion

Відповіді:


332

Так, можливо.

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

Дивіться: http://docs.python.org/tutorial/errors.html

Ключове слово "as" використовується для присвоєння помилки змінній, щоб потім помилку можна було більш детально дослідити в коді. Також зауважте, що круглі дужки для випадку потрійного винятку потрібні в python 3. Ця сторінка містить більше інформації: Ловіть кілька винятків в одному рядку (крім блоку)


78
Якщо ви хочете зробити те саме в обох випадках, це так except (SomeError, OtherError):. Не відповідає на питання ОП, але може допомогти людям, які потрапляють сюди через Google.
Марк

Якщо, наприклад, вам доведеться конвертувати декілька версій структури даних у нову структуру, тоді, наприклад, при оновленні версій коду, ви можете вкласти спробуйте.
Рольф Саксонський

5
Якщо ви хочете обробити всі винятки, вам слід скористатися except Exception:замість простого except:. (Рівнина, окрім того, що зловить навіть, SystemExitі KeyboardInterruptяка зазвичай не є тим, що хочеться)
polvoazul

Можливо, ви хочете щось зробити з тим, eяк ви даєте йому ім'я :)
HelloGoodbye,
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.