Клас Exception є прямим нащадком базового класу TObject. Разом зі своїми нащадками він призначений для обробки виняткових ситуацій (виключень), що виникають при некоректні дії програми: наприклад, у разі поділу на нуль, при спробі відкрити неіснуючий файл, при виході за межі виділеної області динамічної пам'яті і т. п. У цьому розділі розглядаються основні властивості виключень і їх використання для підвищення надійності програм.
Для обробки виключень в Object Pascal передбачений механізм захищеного блоку:
Try … except … end; try … finally … end;
Існують два типи захищених блоків - except і finally що відрізняються способом обробки виключення. У блоці except спочатку виконуються оператори секції try ... except, якщо оператори виконані без виникнення виняткової ситуації, робота захищеного блоку на цьому припиняється, і управління отримує оператор, що стоїть за end, якщо при виконанні частини try виник виняток, управління отримує відповідний обробник у секції except. У блоці finally оператори отримують управління завжди, незалежно від того, чи виникло виняток у секції try … finally чи ні. Обробники винятків у блоці, окрім мають такий синтаксис: on <клас винятку> do <оператор>; Тут, do - зарезервовані слова; <клас винятку>-клас обробки виключення <оператор> - будь-який оператор OP.
Часто бувають випадки, коли в програмі має виконатися певна частина коду, незважаючи на те, що виконується до неї код може бути перерваний внаслідок виникнення виняткової ситуації. Наприклад, коли операція захоплює ресурс, дуже часто буває важливим звільнення даного ресурсу, незалежно від того, чи була чергова операція завершена нормально, чи ні. У таких випадках ви можете використовувати оператор try … finally … end;
В наступному прикладі показаний код, який здійснює відкриття та обробку файлу, який гарантує, що файл буде закритий, навіть якщо під час його обробки виникла помилка: Reset(F);
Блок try називається захисним блоком. Якщо при виконанні програми в ньому відбувається помилка, то він завершується і виконання передається блоку except. Якщо виключення обробляється в блоці, за винятком, то після його обробки програма продовжує виконуватися з оператора, наступного після try … except … end; Якщо виключення залишається необробленим і є осяжний блок try, то виконання передається його блоку exeption. Якщо осяжного блоку try немає, то програма завершується з помилкою. Нарешті, якщо в блоці try помилки не відбулося, то блок except ігнорується і виконання програми продовжується далі.
Блок обробки виключень є або послідовність операторів, розділених крапкою з комою, або послідовність обробників виключень вигляду:
on імя: тип do оператор.
39. Розпізнавання та опрацювання винятків, оператор on … do … [else …].
Клас Exception є прямим нащадком базового класу TObject. Разом зі своїми нащадками він призначений для обробки виняткових ситуацій (виключень), що виникають при некоректні дії програми: наприклад, у разі поділу на нуль, при спробі відкрити неіснуючий файл, при виході за межі виділеної області динамічної пам'яті і т. п. У цьому розділі розглядаються основні властивості виключень і їх використання для підвищення надійності програм.
Для обробки виключень в Object Pascal передбачений механізм захищеного блоку:
Try … except … end; try … finally … end;
Обробники винятків у блоці, окрім мають такий синтаксис: on <клас винятку> do <оператор>; Тут, do - зарезервовані слова; <клас винятку>-клас обробки виключення <оператор> - будь-який оператор Object Pascal, крім оператора передачі управління goto мітку поза блоком except.
on EZD: EZeroDivide do EZD.Message := 'Ділення на нуль!';
on System.FormatException do writeln('Невірний формат введення'); else writeln('Інакше виключення');