|
|||
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е('Ошибка! '); Такой прием - единственная возможность возбудить нестандартное исключение, обрабатываемое пользовательским классом.
|
|||
|