Винятки у python
Винятки (exceptions) - ще один тип даних у python. Винятки необхідні для того, щоб повідомляти програміста про помилки.
Найпростіший приклад виключення - поділ на нуль:
Розберемо це повідомлення докладніше: інтерпретатор нам повідомляє про те, що він упіймав виняток і надрукував інформацію (Traceback (most recent call last)).
Далі ім'я файлу (File ""). Ім'я порожнє, тому що ми знаходимося в інтерактивному режимі, рядок у файлі (line 1);
Вираз, у якому сталася помилка (100/0).
Назва виключення (ZeroDivisionError) та короткий опис виключення (division by zero).
Зрозуміло, можливі й інші винятки:
У цих двох прикладах генеруються винятки TypeError та ValueError відповідно. Підказки дають нам повну інформацію про те, де породжений виняток, і з чим він пов'язаний.
Розглянемо ієрархію вбудованих у python винятків, хоча іноді вам можуть зустрітися й інші, оскільки програмісти можуть створювати власні винятки. Цей список є актуальним для python 3.3, у більш ранніх версіях є незначні зміни.
Тепер, знаючи, коли і за яких обставин можуть виникнути винятки, ми можемо їх опрацьовувати. Для обробки винятків використовується конструкціяtry - except.
Перший приклад застосування цієї конструкції:
У блоці try ми виконуємо інструкцію, яка може спричинити виняток, а в блоці except ми перехоплюємо їх. При цьому перехоплюються як виняток, так і його нащадки. Наприклад, перехоплюючи ArithmeticError, ми також перехоплюємо FloatingPointError, OverflowError і ZeroDivisionError.
Також можливаінструкція except без аргументів, яка перехоплює взагалі все (і переривання з клавіатури, системний вихід і т. д.). Тому в такій формі інструкція except практично не використовується, а використовується except Exception. Однак найчастіше перехоплюють винятки по одному для спрощення налагодження (раптом ви ще іншу помилку зробите, а except її перехопить).
Ще дві інструкції, що стосуються нашої проблеми, цеfinallyта else. Finally виконує блок інструкцій у разі, чи був виняток, чи ні (застосовна, коли необхідно обов'язково щось зробити, наприклад, закрити файл). Інструкція else виконується у тому випадку, якщо винятку не було.