Перехват нескольких исключений в одном блоке
В Python один блок except может ловить несколько типов исключений сразу — для этого они перечисляются в кортеже в скобках.
Что нужно знать
Перед изучением примера полезно понимать:
Базовый ввод и вывод в Python — ввод и вывод
Исключения Python — исключения
Обработка исключений Python — обработка исключений
Пример. Несколько исключений в кортеже
string = input()
try:
num = int(input())
print(string+num)
except (TypeError, ValueError) as e:
print(e)
Ввод
a
2
Вывод
can only concatenate str (not "int") to str
Здесь блок except ловит два типа ошибок — TypeError и ValueError. Они передаются как кортеж в скобках.
В первом сценарии пользователь ввёл строку a и число 2. Преобразование int(input()) отработало без ошибок, но дальше Python попытался выполнить string + num — сложение строки и числа, что недопустимо. Возникает TypeError, который перехватывается, и его сообщение выводится через print(e).
Другой сценарий
Ввод
a
b
Вывод
invalid literal for int() with base 10: 'b'
Теперь второй ввод — это строка b, которую нельзя преобразовать в целое число. Функция int() сразу бросает ValueError, и он тоже корректно перехватывается тем же блоком except.
Примечание
Если в блоке try может возникнуть несколько ошибок, поймана будет та, которая случится первой — выполнение прерывается в момент возникновения исключения.