Перехват нескольких исключений в одном блоке

В Python один блок except может ловить несколько типов исключений сразу — для этого они перечисляются в кортеже в скобках.

Что нужно знать

Перед изучением примера полезно понимать:

Пример. Несколько исключений в кортеже

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 может возникнуть несколько ошибок, поймана будет та, которая случится первой — выполнение прерывается в момент возникновения исключения.