Хелпикс

Главная

Контакты

Случайная статья





except. While not EOF(F) do begin. except. оn Е: EInOutError do. Вызов исключения



try

.. .

except

// Не имеет смысла делать так:

оn EIntError do ...;

оn ERangeError do ...;

оn EDivByZero do ...;

// Надо так:

оn ERangeError do ...;­

оn EDivByZero do ...;

оn EIntError do ...;

end;

 

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

 

оn EObject: EClassName do ..;

 

Для стандартных классов такой прием фактически позволяет использовать единственное строковое свойство Message со стандартным сообщением об ошиб­ке, которое получают все наследники класса Exception. Исключение составляет класс EInOutError, в котором для программиста может представлять интерес целочисленное свойство ErrorCode с кодом ошибки ввода-вывода. Например:

 

try

   Reset(F);

While not EOF(F) do begin

...

end;

CloseFile (F) ;

except

оn Е: EInOutError do

  ShоwМеssаgе('При выполнении файловой операции возникла ошибка №'

                            + IntToStr(E.ErrorCode));

end;

 

Вызов исключения

В некоторых ситуациях программисту бывает необходимо инициировать собствен­ное исключение. Для этого он использует зарезервированное слово raise(возбу­дить). Если это слово встретилось в секции try...except или try...finally, немедленно начинают свою работу соответственно секция except...end или finally...end. Если оно встретилось в секции except...end или finally...end, считается, что данный защищенный блок на текущем уровне вложенности (блоки могут быть вложенными) завершил свою работу и управление передается выше­стоящему уровню.

Слово raise возбуждает исключение самого общего класса Exception. Если программист желает возбудить исключение конкретного типа (неважно, стандарт­ного или собственного), он должен явно указать класс создаваемого в этот момент объекта путем вызова его конструктора. Например, следующий оператор возбу­дит ошибку ввода-вывода:

raise ЕInОutЕrrоr.Сrеаtе('Ошибка! ');

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

 



  

© helpiks.su При использовании или копировании материалов прямая ссылка на сайт обязательна.