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 лекція
Недоступна
Витяг інформації з винятку
Витяг інформації з винятку
Коментарі (5)
ЩОБ ПОДИВИТИСЯ ВСІ КОМЕНТАРІ АБО ЗАЛИШИТИ КОМЕНТАР,
ПЕРЕЙДІТЬ В ПОВНУ ВЕРСІЮ
Serhii Lohachov Рівень 43
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
Я спершу так і зробив Отримав два виключення в консолі але завдання не зарахувало