JavaRush /Курсы /Модуль 1: Python Core /Обработка нескольких исключений

Обработка нескольких исключений

Модуль 1: Python Core
10 уровень , 3 лекция
Открыта

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

2
Задача
Модуль 1: Python Core, 10 уровень, 3 лекция
Недоступна
Получение числа.
Получение числа.
2
Задача
Модуль 1: Python Core, 10 уровень, 3 лекция
Недоступна
Извлечение информации из исключения
Извлечение информации из исключения
Комментарии (8)
ЧТОБЫ ПОСМОТРЕТЬ ВСЕ КОММЕНТАРИИ ИЛИ ОСТАВИТЬ КОММЕНТАРИЙ,
ПЕРЕЙДИТЕ В ПОЛНУЮ ВЕРСИЮ
shinobi Уровень 19
13 августа 2025
Классно, что нам уже какую лекцию впихиывают raise без единного упоминания ранее как и зачем это работает.
Михаил Уровень 44
18 августа 2025
а если бы ты не знал что такое raise ты бы сейчас так переживал? еще не время наверное
shinobi Уровень 19
18 августа 2025
На момент написания комментария выше я не знал что такое raise, и да, я переживал, что мне пихают что-то непонятное, что даже не объяснялось, потому что сразу думаешь что это не автор забил хер на продукт, за который берет деньги, а я что-то "прозевал".
SWK Уровень 26
8 апреля 2025
Вторая задача не принимается без блока finally, хотя его наличие не следует из задания.
Виталий Уровень 33
17 мая 2025
Без блока finally приняло. Переменную объявил перед try и вызвал вне except
Екатерина Уровень 93
24 августа 2024
Первая задача. Вы можете вызвать ошибку IndexError, обратившись к пустой строке по индексу.
Mr.Robot Уровень 21 Expert
14 марта 2025
Спасибо! Реально помог только этот совет. Встроенный "помогатор" совершенно путает только...
SWK Уровень 26
8 апреля 2025
В ужасном предложении таки есть слово "raise":

Если строка пустая, обработайте IndexError, но перед 
этим выбросьте (raise) это исключение, и выведите 
соответствующее сообщение.
Это название команды.