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

Классы исключений определены в модулях 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 все равно выполняется.

Twitter SEO Community Ваау! News2.ru Chipp Korica SMI2 Google Bookmarks Digg I.ua Закладки Yandex Linkstore Myscoop Communizm Ru-marks Webmarks Ruspace Linkomatic Kli.kz Web-zakladka Zakladok.net Reddit delicious Ma.gnolia Technorati Slashdot Yahoo My Web БобрДобр.ru Memori.ru rucity.com МоёМесто.ru Mister Wong

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