Обробка винятків контрацепція, Програмування мовою паскаль
Реклама на сайті
Обробка винятків контрацепція
Класи винятків визначені у модулях Classes та SysUtils. Використовуються для обробки виняткових ситуацій, що виникають під час виконання програми. Наприклад, спроба відкрити файл, якого немає.
Базовий клас винятків – Exception. Його нащадки – класи винятків, імена яких починаються із символу E, за яким слідує опис винятку англійською мовою.
У модулі SusUtils визначено багато винятків. Ось приклади:
- EIntError - помилка операції з цілими числами.
- EZeroDivide – розподіл на нуль.
- ERangeError – помилка діапазону.
- EIntOverflow – помилка переповнення.
- EMathError – математична помилка.
Для обробки винятків передбачено три інструкції:
- інструкції Raise,
- блоки try…except,
- блоки try…finally.
Увага . Ці інструкції доступні у режимах Delphi та ObjPas. У режимі Turbo Pascal вони неможливі.
Інструкція Raise
Інструкція Raise запускає виняток, який попередньо має бути визначений як екземпляр класу винятків. Формат інструкції:
У разі оголошеного винятку ініціалізується екземпляр класу цього винятку. Приклад обробки поділу на нуль, коли цьому винятку надано унікальне ім'я:
Type EDivException = Class (Exception);
Function DoDiv (X, Y: Longint): Integer;
Raise EDivException.Create ('Division by Zero would occur');
Result := X Div Y;
Інструкція try…except
- Виконується секція try.
- Якщо виняток немає, то інструкція завершується.
- Якщо виняток виникає, то секція tryзавершується і виконується обробник виключення з секції except.
Формат обробника винятків у секції except
do; // Будь-яка інструкція, крім goto
Приклад обробки поділу на нуль (використані засоби попереднього прикладу):
На EDivException do Z := 0;
Інструкція try…finally
У ній у разі винятку секція try завершується, виняток спеціально не обробляється, але завжди виконується секція finally. Формат інструкції:
- Виконується група try.
- Якщо виняток виник, всі інструкції, наступні після інструкції, що викликала виняток, пропускаються, і управління передається першою інструкція секції finally.
Якщо винятків не виникло, секція finally все одно виконується.