Локальная обработка исключений

Глобальная обработка исключений

Вопрос

 

Исключительные ситуации в терминологии ООП. Глобальная и локальная обработка исключений. Привести пример использования операторов контроля исключительных ситуаций.

 

Исключительные ситуации в Delphi встречаются постоянно. Исключительная ситуация это такая ситуация, в результате которой генерируется ошибка, и выполнение программы прерывается. Именно потому такая ситуация и называется исключительной. Например, деление на ноль - классический пример исключительной ситуации.

 

 

Механизм глобальной обработки исключений реализуется через объект Application, который есть в любом приложении.

Программист может выполнить полную обработку исключений, создав собственный глобальный обработчик события OnException. Для этого удобно использовать компонент ApplicationEvents.

Событие OnException имеет тип TExceptionEvent, который описан следующим образом:

Type TExceptionEvent = procedure (Sender: TObject; E: Exception) of Object

Параметр E представляет собой объект-исключение. С его помощью можно получить доступ к свойствам объекта-исключения, например, к свойству Message, содержащему описание возникшего исключения.

 

 

Чтобы сделать возможным использование локальных (специализированных) обработчиков исключений, в состав языка введены две конструкции: try …finally и try … except. Обе конструкции имеют похожий синтаксис, но разное назначение. Блоки у включают в себя инструкции программы

Конструкция try …finally состоит из двух блоков (try и finally) и имеет следующую форму:

try

// Инструкции, выполнение которых может вызвать ошибку

finally

// Инструкции, которые должны быть выполнены даже в случае ошибки

end;

Конструкция try …finally работает так: если в любой из инструкций блока try возникает исключение, то управление передается первой инструкции блока finally. Если же исключение не возникло, то последовательно выполняются все инструкции обоих блоков.

Конструкция try … except также состоит из двух блоков (try и except) и имеет следующую форму:

Try

{Инструкции, выполнение которых может вызвать ошибку}

Except

{Инструкции, которые должны быть выполнены в случае ошибки}

End;

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

Конструкция try … except работает так: если в инструкциях блока try возникает исключение, то управление передается первой инструкции блок except. Если же исключение не возникло, то инструкции блока except не выполняется. При появлении исключения инструкции блока except могут ликвидировать исключительную ситуацию и восстановить работоспособность программы. Для исключений, обрабатываемых в конструкции try … except, глобальный обработчик не вызывается, а обработку ошибок должен обеспечить программист.