Винятки та помилки¶
У кожній мові програмування виникають ситуації, коли щось йде не так: невірні дані, проблеми з файлами, помилки у мережевих запитах тощо. Для обробки таких ситуацій використовуються винятки.
Синтаксичні помилки¶
Синтаксичні помилки виникають, коли код не відповідає граматичним правилам мови програмування. Вони можуть бути викликані помилками у структурі коду, невірно написаними ключовими словами, неправильним використанням операторів тощо. Такі помилки виявляються ще до виконання програми і є першими помилками, з якими може стикнутись користувач.
$ барвінок приклад.бр
Синтаксична помилка: Неправильний синтаксис. (знайдено на 1 рядку)
якщо змінна = 42
^
Винятки¶
Навіть якщо програма написана синтаксично правильно, можуть виникати помилки під час її виконання. Такі помилки називаються винятками. Винятки дозволяють програмі реагувати на непередбачувані ситуації, такі як ділення на нуль, звернення до неіснуючого файлу або проблеми з мережею.
Обробка винятків¶
Цей розділ пояснює, як обробляти винятки, щоб забезпечити коректну роботу програм навіть у випадку помилок.
Конструкція спробувати-обробити¶
Конструкція спробувати-обробити використовується для перехоплення і обробки винятків, які виникають у блоці коду. Синтаксис виглядає наступним чином:
спробувати
! Код, який може викликати виняток
обробити ТипВинятку
друк("Виняток оброблений")
обробити ТипВинятку як виняток
! За допомогою оператора 'як' об'єкт помилки присвоюється змінній
друкр("Текст винятку:", виняток)
наприкінці
друкр("Кінець оброки")
кінець
Приклад оброблення помилки ділення на нуль:
спробувати
а = 10
б = 0
друкр(а / б)
обробити ПомилкаДіленняНаНуль
друкр("Помилка: ділення на нуль")
кінець
Блок наприкінці використовується для виконання коду, який має бути виконаний незалежно від того, чи виник виняток. Це корисно для очищення ресурсів або завершення операцій.
спробувати
! Код, який може викликати виняток
обробити ТипВинятку
друкр("Виникла помилка")
наприкінці
! Код, який виконується завжди
очиститиРесурси()
кінець
Зверніть увагу
Якщо виняток був згенерований у блоці обробки, то він замінить оброблюваний виняток. Після цього виконання перейде в блок наприкінці, якщо він існує, а потім цей виняток буде розповсюджений далі.
Зверніть увагу
Якщо виняток був згенерований у блоці наприкінці, то виконання коду в цьому блоці буде завершене, та виняток буде розповсюджений далі.
Клас Виняток¶
Клас Виняток має конструктор, який приймає лише один аргумент — рядок, що представляє текст повідомлення помилки. У цьому класі також перевантажений оператор перетворення до рядка, який повертає повідомлення, передане в конструкторі:
Виклик винятків¶
Ви можете викликати винятки за допомогою оператора жбурнути. Цей оператор дозволяє вам явно кидати винятки у випадках, коли ваша програма стикається з умовами, які не можуть бути оброблені звичайним шляхом. Це корисно для сигналізації про помилки, які можуть виникнути через неправильний ввід або інші критичні умови.
Важливо
Якщо в оператор жбурнути буде переданий об'єкт, який не є нащадком винятку, то буде викликаний виняток ПомилкаТипу.
Список винятків¶
| Ім'я | Опис |
|---|---|
| Виняток | Базовий клас для всіх винятків |
| ПомилкаІмені | Виникає, коли ім'я змінної або функції не знайдено |
| ПомилкаТипу | Виникає, коли операція або функція отримує аргумент невірного типу |
| ПомилкаРеалізації | Виникає, коли реалізація функції або методу відсутня |
| ПомилкаАтрибуту | Виникає, коли вказаний атрибут є відсутнім |
| ПомилкаІндексу | Виникає, коли доступ до елемента масиву або колекції здійснюється за індексом, що виходить за межі допустимого діапазону |
| ПомилкаДіленняНаНуль | Виникає, коли виконується операція ділення на нуль |
| ПомилкаЗначення | Виникає, коли передане значення не відповідає очікуваному діапазону або форматам |
| ВнутрішняПомилка | Виникає при неправильний роботі інтерпретатора, але помилка не є фатальною для завершення роботи |