Описание обработчика исключений в блоке try..except — КиберПедия 

Типы сооружений для обработки осадков: Септиками называются сооружения, в которых одновременно происходят осветление сточной жидкости...

Организация стока поверхностных вод: Наибольшее количество влаги на земном шаре испаряется с поверхности морей и океанов (88‰)...

Описание обработчика исключений в блоке try..except

2018-01-04 200
Описание обработчика исключений в блоке try..except 0.00 из 5.00 0 оценок
Заказать работу

Основным способом реализации исключений является их обработка с помощью блоков try... except. Синтаксис этих блоков следующий:

Try

{исполняемый код} except

{код исполняемый в случае генерации исключения} end;

В случае возникновения исключения в блоке обработки можно предпринять определенные действия: известить пользователя о возникшей проблеме, подсказать ему пути ее решения, принять какие-то меры к исправлению ошибки и т.д. В разделе except можно определить тип сгенерированного исключения и дифференцированно реагировать на различные исключительные ситуации. Это делается с помощью оператора: оа <хласс исключения» do <оператор>;

Рассмотрим пример. Пусть в программе содержится следующий код: С: = StrToInt (Editl. Text); А: = В div С;

Его детальное рассмотрение показывает, что этот код является потенциально опасным по следующим причинам:

· введенная пользователем строка в поле Editl может оказаться не числом;

· введенная пользователем строка в поле Editl может оказаться нулем;

· при выполнении деления потенциально может возникнуть ошибка переполнения.

Поэтому данный код необходимо заключить в блок обработки исключений. Пример: try

С:= StrToInt(Editl.Text); А:= В/С; except

On EConvertError do

MessageDlg ('Вы ввели ошибочное число; повторите ввод',

mtWarning, [тЬОК], 0);

On EDivByZero do

MessageDlg {'Бы ввели нуль; повторите ввод',

mtWarning, [тЬОК], 0);

On EIntOverFlow do

if (B*C) >=0 then A:=32767 else A:= -32766; end;

B рассматриваемом примере некоторые исключения имеют дополнительные поля (свойства), уточняющие вид ошибки. Например, это относится к исключению файлового ввода-вывода EXnOutError, которое имеет свойство ErrorCode типа integer. Это свойство содержит стандартный для Object Pascal номер ошибки файлового ввода/вывода. Для использования полей исключения, оператор on записывается в виде: on <имя>: <класс исключения» do

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


 

Содержащееся в операторе on имя имеет локальную область видимости, нигде не определяется и используется для ссылки на поле по имени объекта исключения. Пусть в переменной filename хранится имя обрабатываемого

файла, тогда пример использования полей исключения при операциях файлового ввода/вывода можно представить так: on IO: EInOutError do begin

Case IO.ErrorCode of

2: s: = 'Файл ' + s + " не найден'; 3: s:= "Ошибочное имя файла ' + s; 4: s:= "Слишком много открытых файлов';

5: в:= "Файл ' + а + " не доступен'; I

100: з:= "Достигнут конец файла ' + з; 101: з:= 'Диск переполнен при работе с файлом ' + з; 106: з:= 'Ошибка ввода при работе с файлом ' + я;

end;

MessageDlg (з, mtWarning, fmbOK], 0);

end;

Можно перехватывать не только отдельные исключения, но и группы

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

Например, чтобы перехватить исключения всех классов, порожденных от EIntError:

On EIntError do

MessageDlg ("Ошибка целочисленной операции', mtWarning, [mbOKJ, 0)

В раздел except могут включаться или только оператор on или только

какие-то другие операторы. Помимо оперзтора on, обрабатывающего заданные

классы исключений, в раздел except может быть включен оператор else, в

котором выполняется обработка всех, не перехваченных ранее исключений, т.е. происходит обработка по умолчанию: except

on... on...

else <обработчик всех не перехваченных ранее событий»;

end;

Омератор else должен идти последним, иначе все обработчики будут перехвачены уже в этом операторе. Внутри обработчика по умолчанию можно получить доступ к объекту исключения с помощью функции ExceptObject. Использовать обработку исключении «по умолчанию» следует осторожно, поскольку перехват всех исключений способен замаскировать какие-то

непредвиденные ошибки в программе, что затруднит их поиск и снизит

надежность работу.

Процедура обработки исключения в блоках try...except Клоки try...except могут быть вложены явным или неявным образом. Примером неявной вложенности является блок try...except, в котором среди операторов ра)дела try имеются вызовы функций или процед>р, которые имеют спои собственные try...except. Рассмотрим последовательность обработки

исключений в этих случаях. При генерации исключения сначала ищется соответствующий ему обработчик on в том блоке try... except, в котором создалась исключительная ситуация. Если соответствующий обработчик не найден, поиск ведется во внешнем блоке try... except (при наличии явным образом вложенных блоков) и т.д. Если в данной функции или процедуре обработчик не найден или вообще в ней отсутствуют блоки try... except, то поиск переходит на следующий уровень - в блок, из которого была вызвана данная процедура или функция. Этот поиск продолжается по всем уровням. И только если он закончился безрезультатно, выполняется стандартная процедура обработки исключения. Как только оператор on, соответствующий данному исключению, найден и выполнен, объект исключения разрушается и управление передается оператору, следующему за тем блоком try...except, в котором был осуществлен перехват.

Возможен также вариант, когда в самом обработчике исключения в процессе обработки возникает исключительная ситуация. В этом случае обработка прерывается, прежнее исключение разрушается и генерируется новое исключение. Его обработчик ищется в блоке try..except, внешним по отношению к тому, в котором возникло новое исключение.

Если исключение не перехвачено нигде в программе, то оно обрабатывается методом TApplication. HandleException. Он обеспечивает стандартную реакцию: вывод информационного окна и уничтожение экземпляра исключения. При этом управление не возвращается к тому обработчику событий, код которого привел к возникновению исключения.

Если п, ограмма, вызвавшая исключения выполнялась в среде Delphi, то кроме стандартного окна, выводится еще сообщения отладчика Delphi. При этом управление автоматически передается в Редактор кода Delphi, на строку, оператор в которой вызвал исключение. Такой режим можно отключить командой главного меню Tools->Debugger Options->Language Exceptions и выключить опцию Break On Exception.


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

Таксономические единицы (категории) растений: Каждая система классификации состоит из определённых соподчиненных друг другу...

Папиллярные узоры пальцев рук - маркер спортивных способностей: дерматоглифические признаки формируются на 3-5 месяце беременности, не изменяются в течение жизни...

Биохимия спиртового брожения: Основу технологии получения пива составляет спиртовое брожение, - при котором сахар превращается...

Состав сооружений: решетки и песколовки: Решетки – это первое устройство в схеме очистных сооружений. Они представляют...



© cyberpedia.su 2017-2024 - Не является автором материалов. Исключительное право сохранено за автором текста.
Если вы не хотите, чтобы данный материал был у нас на сайте, перейдите по ссылке: Нарушение авторских прав. Мы поможем в написании вашей работы!

0.011 с.