4.1 Перехват нескольких исключений
Python позволяет обрабатывать несколько исключений, используя несколько блоков except или один блок except с кортежем исключений. Рассмотрим оба подхода.
Несколько блоков except
Вы можете использовать несколько блоков except, чтобы обрабатывать разные типы исключений по-разному.
try:
# Код, который может вызвать исключение
result = int("abc")
except ValueError:
print("Ошибка: некорректное значение.")
except ZeroDivisionError:
print("Ошибка: деление на ноль.")
Один блок except с кортежем исключений
Вы можете обрабатывать несколько исключений в одном блоке except, передав их в виде кортежа.
try:
# Код, который может вызвать исключение
result = int("abc")
except (ValueError, ZeroDivisionError) as e:
print(f"Произошла ошибка: {e}")
Использование except NameError as var
При обработке исключений вы можете использовать синтаксис except <ExceptionType> as <variable> для получения объекта исключения. Это позволяет получить доступ к информации об исключении, такой как сообщение об ошибке и другие атрибуты.
try:
# Код, который может вызвать NameError
print(undeclared_variable)
except NameError as e:
print(f"Произошла ошибка: {e}")
print(f"Тип ошибки: {type(e)}")
4.2 Область видимости переменной ошибки
Переменная, в которую сохраняется исключение (e в примере выше), доступна только внутри своего блока except. Вне этого блока переменная недоступна.
try:
# Код, который может вызвать NameError
print(undeclared_variable)
except NameError as e:
print(f"Произошла ошибка: {e}")
print(f"Тип ошибки: {type(e)}")
# Здесь e уже недоступна, и следующая строка вызовет NameError
# print(e) # NameError: name 'e' is not defined
Если вы хотите сделать с исключением что-то важное вне его блока, то вам нужно сохранить его в отдельную переменную. Пример:
exception = None
try:
# Код, который может вызвать исключение
result = int("abc")
except ValueError as e:
exception = e
print("Ошибка: некорректное значение.")
except ZeroDivisionError as e:
exception = e
print("Ошибка: деление на ноль.")
print(exception)
Обратите внимание, что переменная exception сохраняет последнее возникшее исключение, что может быть полезно при последующей обработке за пределами блока try.
4.3 Что полезного содержится в ошибке
Объект исключения содержит информацию об ошибке. В зависимости от типа исключения объект может содержать различные атрибуты.
Вот некоторые общие атрибуты, доступные для большинства исключений:
-
args: Кортеж, содержащий аргументы, переданные при создании исключения. Обычно это сообщение об ошибке. -
message: Строка, содержащая сообщение об ошибке (в некоторых исключениях). -
__str__: Метод, возвращающий строковое представление исключения. Этот метод используется для получения текстового представления ошибки, которое будет возвращено при использовании функцииprint()на объекте исключения.
Пример:
try:
# Код, который может вызвать ValueError
result = int("abc")
except ValueError as e:
print(f"Произошла ошибка: {e}")
print(f"Аргументы ошибки: {e.args}")
print(f"Сообщение об ошибке: {str(e)}")
Пример обработки нескольких исключений
try:
# Код, который может вызвать несколько типов исключений
result = 10 / 0
except (ValueError, ZeroDivisionError) as e:
print(f"Произошла ошибка: {e}")
print(f"Тип ошибки: {type(e)}")
print(f"Аргументы ошибки: {e.args}")
Если возникает ValueError или ZeroDivisionError, он будет перехвачен блоком except. Информация об исключении будет доступна через переменную e. Вывод будет содержать тип ошибки и аргументы, переданные при создании исключения.
ПЕРЕЙДИТЕ В ПОЛНУЮ ВЕРСИЮ