В 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))
Если в этом коде возникает ошибка, программа выводит сообщение «Произошла ошибка:» и далее следует информация об ошибке, связанная с исключением.