Навіщо потрібні виключення

Глава 27. Основи винятків

винятками (навмисна гра слів), як буде показано нижче, обробка виключень в мові Python виконується дуже просто, по тому що вони інтегровані безпосередньо в саму мову, як і інші високорівневі засоби.

Одне технічне примітка перед початком: після виходу першого видання цієї книги в винятки відбулися дві зміни - перед ложение finally може тепер бути присутнім в інструкції try разом з пропозиціями except і else, а виключення, що визначаються програм мій, тепер повинні бути екземплярами класів, а не простими будів ками. У цьому виданні я опишу і старий, і новий способи роботи з ис винятком, тому що в існуючому програмному коді вам ще часто будуть зустрічатися початкові прийоми. Попутно я розповім, якими шляхами йшов розвиток в цій галузі. Я також опишу нову інструкцію with незважаючи на те, що її офіційна поява ожі дається тільки в наступному випуску Python.

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

Тепер припустимо, що що то пішло зовсім не так під час «випе Канія основи». Можливо, зламалася піч або, можливо, наш робот помилився в розрахунках відстані до печі і запалав. Цілком очевидно, що нам необхідно передбачити швидкий перехід до про програмний коду, який швидко обробляє такі ситуації. Крім того, оскільки в таких незвичайних умовах у нас немає ніякої надеж ди на успішне закінчення процесу приготування піци, ми могли б також взагалі відмовитися від виконання всього плану цілком.

Це саме те, що дозволяють робити винятки: програма може перейти до обробника виключення за один крок, скасувавши всі виклики функцій. Виняток - це свого роду «супер goto». 1 Оброблювач ис винятком (інструкція try) ставить мітку і виконує деякий про програмний код. Якщо потім де-небудь в програмі виникає исключе

1 Якщо ви використовували мову C, вам буде цікаво дізнатися, що исключе ня в мові Python трохи схожі на стандартну для мови C пару функцій setjmp / longjmp: інструкція try діє як функція setjmp, а інструкція raise як longjmp. Тільки в мові Python виключення основа ни на об'єктах і є стандартною частиною моделі виконання.

Навіщо потрібні виключення?

ня, інтерпретатор негайно повертається до мітки, скасовуючи всі ак тивні виклики функцій, які були зроблені після установки мітки. Код в обробнику виключення може відповідним обра зом відреагувати на ситуацію (викликати пожежників, наприклад). Крім того, перехід до обробника виключення виконується негайно, з цього зазвичай немає ніякої необхідності перевіряти коди повернення ка ждой викликаної функції, яка могла зазнати невдачі.

призначення виключень

У програмах на мові Python виключення можуть грати різні ролі. Нижче наводяться деякі з них, які є найбільш типовими:

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

Повідомлення про події

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

Обробка особливих ситуацій

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

Як буде показано далі, інструкція try / finally дозволяє гаран тувати виконання завершальних операцій незалежно від наяв чия винятків.

Незвичайне управління потоком виконання

І, нарешті, так як виключення це свого роду оператор «goto», їх можна використовувати як основу для екзотичного управління потоком виконання програми. Наприклад, зворотна трасування не є частиною самої мови, але вона може бути реалізована

Схожі статті