В Python исключение — это ситуация, которая прерывает обычное выполнение программы. Это может произойти из-за некорректного ввода данных, отсутствия ответа от сервера, отсутствия нужного файла и так далее. Когда такие исключения возникают, Python останавливает программу и выдаёт сообщение об ошибке.
Чтобы предотвратить неожиданное завершение работы программы, мы используем блоки try-except для обработки этих исключений. В блоке try мы пишем код, который потенциально может вызвать исключение, а в блоке except — код, который обрабатывает это исключение.
В Python мы можем перехватывать несколько исключений в одном блоке исключений. Это полезно, когда у вас есть фрагмент кода, который может вызвать несколько типов исключений и вы хотите обработать их все одинаково.
Синтаксис:
try:
# code that may raise an exception
except(ExceptionType1, ExceptionType2, ExceptionType3, ...):
# code to handle the exception
Пример
Допустим, вы пишете программу на языке Python, которая считывает данные из файла и выполняет операцию деления. В процессе работы этот код может столкнуться с несколькими ошибками.
Например, при использовании функции open() может возникнуть ошибка FileNotFoundError, если указанный файл не существует. А при выполнении операции деления может возникнуть ошибка ZeroDivisionError, если попытаетесь разделить на ноль.
Вот как можно перехватить оба исключения в Python с помощью одного блока исключений:
try:
file = open("myfile.txt", "r")
number = int(file.read())
result = 100 / number
except(FileNotFoundError, ZeroDivisionError):
print("An error occurred")
В этом коде, если происходит ошибка FileNotFoundError или ZeroDivisionError, программа выдаст сообщение «Произошла ошибка» и продолжит выполнение остальных частей программы.
Если же вы хотите, чтобы при каждом исключении выполнялся разный код, вам нужно использовать отдельные блоки исключений.
try:
file = open("myfile.txt", "r")
number = int(file.read())
result = 100 / number
except FileNotFoundError:
print("The file was not found")
except ZeroDivisionError:
print("Cannot divide by zero")
В этом примере, если файл не найден, программа выводит сообщение: «Файл не найден». А если возникает ошибка деления на ноль, то программа сообщает: «Невозможно разделить на ноль».
Другой пример:
Рассмотрим ситуацию, когда у нас есть словарь Python, заполненный пользовательскими данными. Мы хотим выполнить некоторые операции с этим словарём, но есть вероятность возникновения исключений.
Например, мы можем попытаться получить доступ к ключу, которого нет в словаре. Это приведёт к возникновению исключения KeyError. Также мы можем попытаться преобразовать строку в целое число, но если строка содержит символы, не являющиеся цифрами, то возникнет исключение ValueError.
user_data = {
"name": "John",
"age": "25",
"balance": "two thousand" # This should have been a numeric string.
}
try:
# Accessing a non-existing key will raise a KeyError.
email = user_data["email"]
# Converting a non-numeric string to an integer will raise a ValueError.
balance = int(user_data["balance"])
except(KeyError, ValueError) as e:
print("An error occurred: ", str(e))
В этом коде, если ключ «email» отсутствует в словаре, возникнет ошибка KeyError. Если же мы попытаемся преобразовать строку «две тысячи» в целое число, возникнет ошибка ValueError. Оба этих исключения обрабатываются блоком исключений, что позволяет выводить сообщение об ошибке.
Посмотрите на скриншот ниже, чтобы увидеть результат.

Использование as
В Python вы можете использовать ключевое слово `as` в блоке исключений, чтобы получить доступ к объекту исключения. Это позволяет вам вывести сообщение об ошибке, связанное с исключением, или обратиться к другим его свойствам.
Вот пример:
try:
file = open("myfile.txt", "r")
number = int(file.read())
result = 100 / number
except(FileNotFoundError, ZeroDivisionError) as e:
print("An error occurred: ", str(e))
Если в этом коде возникает ошибка, программа выводит сообщение «Произошла ошибка:» и далее следует информация об ошибке, связанная с исключением.