Обробка винятків в Python

 5620

На минулому уроці ми дізналися про винятки в Python. Винятки можуть у будь-який момент завершити виконання програми. Саме тому важливо обробляти винятки. Для цього в Python використовується блок try...except.

Конструкція try…except в Python

Блок try...except використовується для обробки винятків. Його синтаксис:

Код, який може згенерувати виняток, знаходиться всередині блоку try. За кожним блоком try слідує блок except. Коли виникає виняток, він перехоплюється блоком except.

Примітка: Блок except не може бути використаний без блоку try.

Приклад обробки винятку за допомогою try...except:

Результат:

Error: Denominator cannot be 0.

У цьому прикладі ми намагаємось поділити число на 0. Через це генерується виняток. Щоб обробити виняток, ми помістили код result = numerator/denominator всередині блоку try. Тепер, коли виникає виняток, решта коду всередині блоку try пропускається.

Блок except перехоплює виняток, і код всередині блоку except виконується. Якщо код у блоці try не генерує виняток, блок except пропускається.

Перехоплення специфічних винятків в Python

Для кожного блоку try може існувати від нуля і більше блоків except. Декілька блоків except дозволяють обробляти кожен виняток по-різному.

Тип аргументу кожного блоку except вказує на тип винятку, який може бути оброблений цим блоком. Наприклад:

Результат:

Error: Index Out of Bound

Тут ми створили список з ім’ям even_numbers.

Оскільки перший елемент списку знаходиться під індексом 0, останній елемент списку знаходиться під індексом 3. Зверніть увагу на стейтмент:

Тут ми намагаємося отримати доступ до елемента під індексом 5. Отже, виникає виняток IndexError.

Коли виняток IndexError виникає у блоці try:

   виняток ZeroDivisionError пропускається;

   виконується код всередині винятку IndexError.

Конструкція try з умовою else в Python

У деяких ситуаціях може знадобитися виконати певний блок коду, якщо код всередині try виконається без помилок. Для таких випадків використовується необов’язкове ключове слово else разом з оператором try. Наприклад:

Результат:

   Якщо ми передаємо непарне число:

Enter a number: 1
Not an even number!

   Якщо ми передаємо парне число, то обчислюється значення:

Enter a number: 4
0.25

   Однак, якщо ми передамо 0, то отримаємо помилку ZeroDivisionError, оскільки код всередині else не обробляється попереднім except:

Enter a number: 0
Traceback (most recent call last):
File "<string>", line 7, in <module>
reciprocal = 1/num
ZeroDivisionError: division by zero

Примітка: Винятки у блоці else не обробляються попередніми блоками except.

Конструкція try…finally в Python

В Python блок finally виконується завжди, незалежно від того, генерується виняток чи ні. Блок finally є необов’язковим. І для кожного блоку try може бути лише один блок finally. Наприклад:

Результат:

Error: Denominator cannot be 0.
This is finally block.

Тут ми ділимо число на 0 всередині блоку try. При цьому генерується виняток, який перехоплюється блоком except. Потім виконується блок finally.

Оцінити статтю:

1 Зірка2 Зірки3 Зірки4 Зірки5 Зірок (10 оцінок, середня: 5,00 з 5)
Завантаження...

Залишити відповідь

Ваш E-mail не буде опублікований. Обов'язкові поля відмічені *