Студопедия

КАТЕГОРИИ:


Архитектура-(3434)Астрономия-(809)Биология-(7483)Биотехнологии-(1457)Военное дело-(14632)Высокие технологии-(1363)География-(913)Геология-(1438)Государство-(451)Демография-(1065)Дом-(47672)Журналистика и СМИ-(912)Изобретательство-(14524)Иностранные языки-(4268)Информатика-(17799)Искусство-(1338)История-(13644)Компьютеры-(11121)Косметика-(55)Кулинария-(373)Культура-(8427)Лингвистика-(374)Литература-(1642)Маркетинг-(23702)Математика-(16968)Машиностроение-(1700)Медицина-(12668)Менеджмент-(24684)Механика-(15423)Науковедение-(506)Образование-(11852)Охрана труда-(3308)Педагогика-(5571)Полиграфия-(1312)Политика-(7869)Право-(5454)Приборостроение-(1369)Программирование-(2801)Производство-(97182)Промышленность-(8706)Психология-(18388)Религия-(3217)Связь-(10668)Сельское хозяйство-(299)Социология-(6455)Спорт-(42831)Строительство-(4793)Торговля-(5050)Транспорт-(2929)Туризм-(1568)Физика-(3942)Философия-(17015)Финансы-(26596)Химия-(22929)Экология-(12095)Экономика-(9961)Электроника-(8441)Электротехника-(4623)Энергетика-(12629)Юриспруденция-(1492)Ядерная техника-(1748)

Искусственная генерация исключений




Try

Зачистка в разделе модуля Finalization

В этом разделе можно проверить, завершается программа нормально (ExceptAddr=Nil) или аварийно, используя функцию ExceptAddr. Для этого следует указать хотя бы пустой раздел модуля Initialization.

1.6.6. Блок обработки исключений Try ‑ Except ‑ End

Try <операторы> Except <обработка исключений> [ Else <операторы>] End; Операторы, которые указаны после Except, выполняются только при аварийном завершении работы операторов, указанных перед Except. Для задания обработки исключений в этом блоке используются операторы:

On <класс исключений> Do <оператор> или другие операторы; смешение операторов On с другими операторами не допускается.

Операторы, указанные после Else, выполняются для всех, не перехва­чен­ных ранее исключений.

Пример:

Var A,C,B: Shortint;

Begin A:=1; B:=100;

C:=StrToInt(Edit1.Text); A:=(B Div C); //обычное выполнение

Except //начало блока обработки исключений

On EConvertError Do ShowMessage('Ошибка ‑ не число! Повторите ввод');

On EdivByZero Do ShowMessage('Ошибка ‑ ноль! Повторите ввод');

On EIntOverFlow Do If (B*C)>=0 Then A:=127 Else A:=‑128;

End; //окончание блока

Некоторые исключения имеют дополнительные свойства (поля). Например, исключение EinOutError имеет свойство ErrorCode типа Integer с кодом ошибки ввода‑вывода. Для использования таких свойств. Оператор On записывается в виде:

On < метка>: <класс исключений> Do

<операторы с конструкциями <метка>. <свойство>;

Пример контроля за операциями файлового ввода - вывода:

On 10: EinOutError Do //начало обработки исключений при вводе ‑ выводе

Begin Case 10.Errorcode Of //оператор выбора варианта обработки

2: S:=’Файл ‘+S+’ не найден!’; //код ошибки=2

106: S:=’Ошибка ввода при работе с файлом ‘+S; //ошибка=106

End; //окончание обработки вариантов ошибок

ShowMessage(S); //вывод сообщения об ошибке

End; //окончание обработки исключений при вводе‑выводе

Допускаются конструкции вида:

Try... Try... Finally... End; Except... [Else... ] End;

Допускается вложенность блоков Try...Except. В этом случае внача­ле ищется обработчик в блоке, в котором создалось исключение, и если его нет, то продолжается поиск в обрамляющем блоке, и. т. д.

Для отладки обработки исключений используется оператор:

Raise [<тип исключения>[. <имя конструктора>(<параметры>)]];

Если исключение не указано, то повторно генерируется ранее обработанное исключение по схеме:

Try <операторы внешнего блока>

Try <операторы внутреннего блока>

Except //исключения внутреннего блока

On <тип исключения> Do //начало обработки исключения

Begin <обработка исключения внутреннего блока>

Raise; //повторная генерация исключения

End; //окончание обработки исключения

End; //окончание обработки всех исключений внутреннего блока

<операторы внешнего блока>

Except //исключения внешнего блока и повторно сгенерированное

On <тип исключения> Do <обработка исключений обоих блоков>

End; //окончание обработки всех исключений внешнего блока

 

Пример проверки вводимого значения для делителя:

If (Edit1.Text=’’) Then Raise EZeroDivide.Create(‘Пустое значение’);

Если в поле Edit1 будет пустое значение, то сгенерируется исклю­че­ние EzeroDivide и появится окно с текстом ‘Пустое значение’.

 




Поделиться с друзьями:


Дата добавления: 2014-12-08; Просмотров: 489; Нарушение авторских прав?; Мы поможем в написании вашей работы!


Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет



studopedia.su - Студопедия (2013 - 2024) год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! Последнее добавление




Генерация страницы за: 0.009 сек.