Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Вивчайте Ланцюжок Виключень та Повторне Підняття | Всебічна обробка помилок
Структурне програмування на Python

Ланцюжок Виключень та Повторне Підняття

Свайпніть щоб показати меню

Під час обробки помилок у Python може виникнути ситуація, коли перехоплення одного винятку призводить до необхідності згенерувати інший виняток. У таких випадках важливо зберегти контекст початкової помилки. Механізм ланцюжка винятків у Python дозволяє це зробити за допомогою ключового слова from. Явне ланцюжкування винятків забезпечує більш детальні трасування, що полегшує розуміння послідовності помилок, які призвели до збою.

Припустимо, ви пишете функцію для обробки вхідних даних з файлу. Якщо під час читання файлу виникає помилка, можливо, ви захочете згенерувати власний виняток, який краще відповідає логіці вашого застосунку, але при цьому зберегти інформацію про початкову помилку. Використання raise NewException() from original_exception дозволяє зробити саме це.

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

12345678910111213141516
# Simple exception chaining and re-raising example def divide(a, b): try: return a / b except ZeroDivisionError as err: # Chain a new exception to the original raise ValueError("Cannot divide by zero") from err try: divide(5, 0) except ValueError as e: print("Caught ValueError:") import traceback traceback.print_exc() print("\nRe-raising the exception...\n") raise

Цей код демонструє просте ланцюжкування та повторне підняття винятків у Python. Функція divide намагається поділити два числа та перехоплює ZeroDivisionError, ланцюжкує його з новим ValueError із зрозумілим повідомленням. Зовнішній блок try-except перехоплює ValueError, виводить повну трасування з обома винятками, а потім повторно піднімає виняток для подальшого поширення.

question mark

Яка з наведених є основною перевагою ланцюжка виключень у Python?

Виберіть правильну відповідь

Все було зрозуміло?

Як ми можемо покращити це?

Дякуємо за ваш відгук!

Секція 1. Розділ 6

Запитати АІ

expand

Запитати АІ

ChatGPT

Запитайте про що завгодно або спробуйте одне із запропонованих запитань, щоб почати наш чат

Секція 1. Розділ 6
some-alt