Python: одна попытка несколько, кроме


199

В Python возможно ли иметь несколько exceptоператоров для одного tryоператора? Такие как :

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

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

6
Это работает. Попробовал это с интерпретатором Python ...
Eva611

39
@ Eva611 Я думаю, что твой вопрос был в порядке. Для меня это было гораздо быстрее, чем настроить пример в интерпретаторе Python, поэтому я был рад, что вы спросили. DrTysa и другие должны были просто ответить «да», а не ругать вас.
Galarant

5
В большинстве случаев ваше первое предположение будет неверным или пропустит тонкие нюансы, поэтому (как и 15 000 других) я сначала попробовал Google!
Крис

9
Я попробовал Google и нашел этот вопрос. Поэтому я рад, что кто-то еще спросил об этом на таком публичном форуме, как SO, и я рад, что другие люди связались с ним, так что алгоритм Google обнаружил это как мой первый результат.
kingledion

Ответы:


333

Да, это возможно.

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.
Марк

Например, если вам нужно преобразовать несколько версий структуры данных в новую структуру, например, при обновлении версий кода вы можете вложить try..excepts.
Саксонский Рольф 4

5
Если вы хотите обработать все исключения, вы должны использовать except Exception:вместо обычного except:. (Обычный, кроме как поймать даже, SystemExitи KeyboardInterruptкоторый обычно не то, что вы хотите)
polvoazul

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