JavaRush /Курси /Модуль 1: Python Core /Запуск виключення

Запуск виключення

Модуль 1: Python Core
Рівень 10 , Лекція 5
Відкрита

6.1 Намірений запуск виключень

В Python ти можеш навмисно запускати виключення, використовуючи оператор raise. Це дає можливість сигналізувати про виникнення помилки або неправильної ситуації у твоїй програмі. Давай розглянемо різні способи використання оператора raise і переупакування виключень.

Запуск стандартних виключень

Загальний синтаксис такої операції має вигляд:


raise виключення

Ти можеш запускати стандартні виключення, такі як Exception, TypeError і інші, передаючи їм відповідні повідомлення.

Приклад: raise Exception


def check_number(value):
    if value < 0:
        raise Exception("Вибач, числа менше нуля не дозволені")
        
try:
    check_number(-5)
except Exception as e:
    print(f"Виключення спіймане: {e}")

У цьому прикладі, якщо значення менше нуля, запускається Exception з повідомленням "Вибач, числа менше нуля не дозволені".

Приклад: raise TypeError


def check_integer(value):
    if not isinstance(value, int):
        raise TypeError("Дозволені тільки цілі числа")
        
try:
    check_integer("string")
except TypeError as e:
    print(f"Виключення спіймане: {e}")

У цьому прикладі, якщо значення не є цілим числом, запускається TypeError з повідомленням "Дозволені тільки цілі числа".

6.2 Переупакування виключення

Іноді потрібно перехопити одне виключення і запустити інше, надаючи більш специфічну або корисну інформацію. Це можна зробити за допомогою оператора raise ... from, який зберігає вихідне виключення як причину для нового.

Загальний синтаксис такої операції має вигляд:


raise нове_виключення from старе_виключення

Приклад: Переупакування виключення


class EmptyVariableError(Exception):
    pass
        
def check_non_empty(value):
    if value == "":
        raise ValueError("Змінна порожня")
        
try:
    check_non_empty("")
except ValueError as e:
    raise EmptyVariableError("Порожня змінна виявлена") from e

У цьому прикладі, якщо значення змінної порожнє, спочатку запускається ValueError з повідомленням "Змінна порожня". Це виключення потім перехоплюється, і запускається нове виключення EmptyVariableError з повідомленням "Порожня змінна виявлена", при цьому вихідне виключення передається з допомогою from.

6.3 Аналіз переупакованих виключень

Використання оператора raise ... from дозволяє зберегти інформацію про ланцюжок виключень, що може бути корисно для налагодження. Ти можеш аналізувати переупаковані виключення і їх причини.

Приклад аналізу переупакованих виключень:


class EmptyVariableError(Exception):
    pass
        
def check_non_empty(value):
    if value == "":
        raise ValueError("Змінна порожня")
        
try:
    check_non_empty("")
except ValueError as e:
    raise EmptyVariableError("Порожня змінна виявлена") from e

Запуск наведеного вище коду призведе до наступного виводу:


Traceback (most recent call last): File "example.py", line 8, in 
   
     check_non_empty("") File "example.py", line 5, in check_non_empty raise ValueError("The variable is empty") ValueError: The variable is empty 
   
          
The above exception was the direct cause of the following exception:
          
Traceback (most recent call last): File "example.py", line 10, in 
   
     raise EmptyVariableError("Empty variable detected") from e EmptyVariableError: Empty variable detected 
   

Перша помилка (відмічена зеленим) — це вихідна помилка, яка виникла десь глибоко в коді. Іноді такі помилки виникають час від часу, і це нормальна поведінка програми.

Друга помилка (відмічена синім) — це вже більш високорівнева помилка. Твоя програма або фреймворк повинні знати, як її обробляти. А от якщо ти хочеш заглибитися і дізнатися причини виникнення помилки, тут якраз зелена помилка буде тобі на допомогу.

Все зроблено дуже розумно.

Коментарі (2)
ЩОБ ПОДИВИТИСЯ ВСІ КОМЕНТАРІ АБО ЗАЛИШИТИ КОМЕНТАР,
ПЕРЕЙДІТЬ В ПОВНУ ВЕРСІЮ
Serhii Lohachov Рівень 18
9 січня 2026
Условия задачи, которые забыли указать: - описати в класі атрибут для збереження початкового винятку (наприклад, original_exception) або забезпечити інші засоби доступу до початкового винятку. - переупаковка повинна відбуватись всередині функції validate_input шляхом перехоплення ValueError і підняття InputValidationError всередині тієї ж функції, при цьому зберігши початковий виняток як причину (raise InputValidationError(...) from e).
Alex Stasyuk Рівень 25
19 грудня 2025
Можливо комусь знадобиться моя підказка - перевизначайте в своєму класі конструктор і передавайте повідомлення і саму помилку у відповідний артибут