загрузка...
загрузка...
На головну

OnEZeroDivide do

Except

Try

Except

Try

Except

Try

Except

Try

Begin

Except

Try

Контроль над винятковими ситуаціями

Для контролю над винятковими ситуаціями в групі операторів Паскаля застосовується наступна конструкція:

try

оператори;

except

оброблювані класи виняткових ситуацій;

else оператор;

end;

Ключове слово try (спроба) позначає початок блоку контролю виконання операторів, наступних до ключового слова except. У разі виникнення виняткової ситуації відбувається звернення до списку класів, перерахованих перед завершальним ключовим словом end. При цьому виконується дія, вказане для відповідного класу, а потім управління передається першому оператору, наступного за завершальним ключовим словом end. Оператори, що залишилися в частині try, пропускаються. Якщо виняткові ситуації не зустрілися, то пропускаються всі дії, які йдуть за ключовим словом except. Якщо виникла ситуація не відноситься ні до одного з явно оброблюваних класів, то виконується команда Паскаля, зазначена після ключового слова else. Частина else в блоці try вказувати не обов'язково.

Класи виняткових ситуацій, призначені для обробки, записуються в наступному форматі:

on назва-класу do оператори;

Таких класів може бути кілька, наприклад:

Assert (Y <> 5,'');

X: = 100 divY;

onEZeroDivide do ZeroProc;

on EAssertionFailed do

ShowMessage ( 'Помилка # 22');

X: = 0;

end;

elseShowMessage ( 'Незрозуміло що');

end;

Якщо в операторі присвоювання буде виявлена спроба поділу на нуль (для цього треба, щоб значення змінної Y дорівнювало 0), то виконається процедура ZeroРгос, яка повинна бути визначена раніше. Якщо ж значенням змінної Y опиниться число 5, то оброблювачем виняткових ситуацій буде згенеровано об'єкт класу EAssertionFailed і виконається група операторів в логічних дужках. Оператор X: = 100 div Y при цьому буде пропущено. Якщо зустрінеться якась інша виняткова ситуація, то виведеться повідомлення Незрозуміло що.

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

X: = Y + Z;

on EIntError do P1;

on EIntOverflow do P2;

end;

Якщо при виконанні оператора X: = Y + Z виникне помилка переповнення EIntOverflow, то викликана, проте, буде підпрограма Р1, тому що ця помилка відноситься також і до класу EIntError, розташованому першим в списку за ключовим словом except.

Можна створити єдиний обробник для будь-якої виняткової ситуації. тоді блок tryзаписується так:

оператори;

дії;

end;

наприклад:

X: = 0;

GlobalProc;

end;

У разі виникнення під час виконання оператора X: = 0 довільній виняткової ситуації викликається процедура GlobalProc.

Іноді реалізованої програмістом обробки помилки недостатньо. Тоді, вказавши ключове слово raiseбез параметра, можна передати управління стандартному оброблювачу Delphi 7:

X: = 100 divY;

Генерація виняткової ситуації «-- попередня | наступна --» Програмний обробник помилок
загрузка...
© om.net.ua