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

Коментарі (5)
ЩОБ ПОДИВИТИСЯ ВСІ КОМЕНТАРІ АБО ЗАЛИШИТИ КОМЕНТАР,
ПЕРЕЙДІТЬ В ПОВНУ ВЕРСІЮ
Serhii Lohachov Рівень 18
5 січня 2026
raise использовать не обязательно
vova_yu Рівень 64
9 травня 2025
Задача "Отримання числа" не коректна: функція int() не кидає виключення IndexError напряму, тільки при обробці ітерованих об'єктів, а вхідні дані цього не передбачають.
Mykola Рівень 21
28 лютого 2025
Використання raise у задачі "Отримання числа" зовсім неочевидне. Цього не було у лекціях. Було б непогано включити це як підказку до завдання.
Andriy Trubchanin Рівень 23
2 березня 2025
А навіщо там raise? Насправді задача дивна, але щоб викликати IndexError у пустого рядка треба просто зчитати перший символ типу value[0].
Дмитро Рівень 31
24 квітня 2025
Я спершу так і зробив Отримав два виключення в консолі але завдання не зарахувало