Контроль над исключительными ситуациями 


Мы поможем в написании ваших работ!



ЗНАЕТЕ ЛИ ВЫ?

Контроль над исключительными ситуациями



Для контроля над исключительными ситуациями в группе операторов Паскаля

применяется следующая конструкция:

try

операторы;

Except

обрабатываемые классы исключительных ситуаций;

else оператор;

end,-

Ключевое слово try (попытка) обозначает начало блока контроля выполнения опе-

раторов, следующих до ключевого слова except. В случае возникновения исключи-

тельной ситуации происходит обращение к списку классов, перечисленных перед

завершающим ключевым словом end. При этом выполняется действие, указанное

для соответствующего класса, а затем управление передается первому оператору,

следующему за завершающим ключевым словом end. Операторы, оставшиеся в

части try. пропускаются. Если исключительные ситуации не встретились, то про-

пускаются все действия, следующие за ключевым словом except.

Если возникшая ситуация не относится ни к одному из явно обрабатываемых клас-

сов, то выполняется команда Паскаля, указанная после ключевого слова else. Часть

else в блоке try указывать не обязательно.

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

в следующем формате:

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

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

try

Assert (Y о 5, ' '),-

X:= 100 div Y;

Except

on EZeroDivide do ZeroProc;

on EAssertionFailecl do

begin

Исключительные ситуации 1 79

ShowMessage('Ошибка # 22'};

X:- 0;

end;

else ShowMessage|'Непонятно что ');

end;

Если в операторе присваивания будет обнаружена попытка деления на ноль (для

этого надо, чтобы значение переменной У было равно 0), то выполнится процедура

ZeroProc, которая должна быть определена ранее. Если же значением переменной Y

окажется число 5, то обработчиком исключительных ситуаций будет сгенерирован

объект класса Е Assertion Failed и выполнится группа операторов в логических скоб-

ках. Оператор X:= 100 div Y при этом будет пропущен. Если встретится какая-то

другая исключительная ситуация, то выведется сообщение Непонятно что.

Поиск класса подходящей исключительной ситуации осуществляется в последо-

вательном порядке. Если возникшую ошибку можно отнести к нескольким клас-

сам, то вызван будет обработчик для класса, расположенного первым, например:

try

X:= Y + Z;

Except

on EIntError do PI;

on EIntOverflow do P2,-

end;

Если при выполнении оператора X:- Y + Z возникнет ошибка переполнения

EIntOverflow, то вызвана, тем не менее, будет подпрограмма Р1, потому что эта ошибка

относится также и к классу EIntError, расположенному первым в списке за ключе-

вым словом except.

Можно создать единый обработчик для любой исключительной ситуации. Тогда

блок try записывается так:

try

операторы;

except

действия,-

end,-

Например:

try

X:= 0;

except

GlobalProc;

end;

В случае возникновения во время исполнения оператора X:- 0 произвольной ис-

ключительной ситуации вызывается процедура GlobalProc.

1 80 Урок 3. Отладке программ

Иногда реализованной программистом обработки ошибки недостаточно. Тогда, ука-

зав ключевое слово raise без параметра, можно передать управление стандартному

обработчику Delphi 7:

Try

X:= 100 div У;

Except

on EZeroDivide do

begin

ShowMessage('Ошибка # 22'),-

raise;

end;

end;

После выдачи сообщения Ошибка # 22 исполнится стандартный обработчик ошибки

EZeroDivide.

Из текста обработчика ошибки можно генерировать другие исключительные ситу-

ации, например:

Try

X:= У +• Z;

Except

on ElntError do

raise EIntOverflow.Create('Возможно переполнение');

end;

Если при сложении целых чисел, хранящихся в переменных Y и Z, возникнет ка-

кая-то арифметическая ошибка (базовый класс ElntError), то в обработчике этой

ошибки будет сгенерирована другая исключительная ситуация EIntOverflow, а обра-

ботка ошибки ElntError завершится.



Поделиться:


Последнее изменение этой страницы: 2017-02-21; просмотров: 190; Нарушение авторского права страницы; Мы поможем в написании вашей работы!

infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 52.90.40.84 (0.005 с.)