Обработка исключений контрацепция

Классы исключений определены в модулях Classes и SysUtils. Используются для обработки исключительных ситуаций, возникающих при исполнении программы. Например, попытка открыть файл, которого нет.

Базовый класс исключений – Exception. Его потомки – классы исключений, имена которых начинаются с символа E, за которым следует описание исключения на английском языке.

В модуле SusUtils опредлено много исключений. Вот примеры:

  • EIntError – ошибка операции с целыми числами.
  • EZeroDivide – деление на ноль.
  • ERangeError – ошибка диапазона.
  • EIntOverflow – ошибка переполнения.
  • EMathError – математическая ошибка.

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

  • инструкции Raise,
  • блоки try…except,
  • блоки try…finally.

Внимание. Эти инструкции доступны в режимах Delphi и ObjPas. В режиме Turbo Pascal они невозможны.

Инструкция Raise

Инструкция Raise запускает исключение, которое предварительно должно быть определено, как экземпляр класса исключений. Формат инструкции:

Raise <Экземпляр класса>;

При возникновении объявленного исключения инициализируется экземпляр класса этого исключения. Пример обработки деления на ноль, когда этому исключению дано уникальное имя:

Type EDivException = Class(Exception);

Function DoDiv (X,Y : Longint) : Integer;

begin

If Y=0 then

Raise EDivException.Create (’Division by Zero would occur’);

Result := X Div Y;

end;

Инструкция try…except

Формат инструкции:

try                                         // Попробуй
< Инструкции >

except                                   // Исключения
<обработчики исключений>

end;                                             // Конец

Алгоритм инструкции:

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

Формат обработчика исключений в секции except

on

<класс исключения>

do < Инструкция >;                  // Любая инструкция, кроме goto

end;

Пример обработки деления на ноль (использованы  средства из предыдущего примера):

Try

Z := DoDiv (X,Y);

Except

On EDivException do Z := 0;

end;

Инструкция try…finally

В ней при возникновении исключения секция try завершается, исключение специально не обрабатывается, но всегда исполняется секция finally. Формат инструкции:

try                              // Попробуй

<Инструкции >

finally                          // Финально

< Инструкции >

end;                                 // Конец

Алгоритм инструкции

  • Выполняется группа try.
  • Если исключение возникло, то все инструкции, следующие после инструкции, вызвавшей исключение, пропускаются, и управление передается первой инструкция секции finally.

Если исключений не возникло, то секция finally все равно выполняется.

TwitterSEO CommunityВаау!News2.ruChippKoricaSMI2Google BookmarksDiggI.uaЗакладки YandexLinkstoreMyscoopCommunizmRu-marksWebmarksRuspaceLinkomaticKli.kzWeb-zakladkaZakladok.netRedditdeliciousMa.gnoliaTechnoratiSlashdotYahoo My WebБобрДобр.ruMemori.rurucity.comМоёМесто.ruMister Wong

Copyright © 2009-2010 Программирование на паскале.