Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
_лекция-32-Т5.doc
Скачиваний:
0
Добавлен:
01.05.2025
Размер:
75.26 Кб
Скачать

5.19.3. Стандартные ис

. Ниже приведено описание этой группы исключительных ситуаций.

EAbort - “скрытое” исключение. Используется, когда надо прервать тот или иной процесс с условием, что пользователь программы не должен видеть сообщения об ошибке. Для повышения удобства использования в модуле SysUtils предусмотрена процедура Abort, определенная, как: procedure Abort; begin raise EAbort.CreateRes(SOperationAborted) at ReturnAddr; end; EIntError - предок исключений, возникающих при выполнении целочисленных операций.

Потомки EintError.

EDivByZero Попытка деления на ноль (целое число). Вызывается в случае деления на ноль, как результат RunTime Error 200. ERangeError Число или выражение выходит за допустимый диапазон, вызывается при попытке обращения к элементам массива по индексу, выходящему за пределы массива, как результат RunTime Error 201 при включенной директиве {$R+}. EIntOverflow Целочисленное переполнение - вызывается при попытке выполнения операций, приводящих к переполнению целых переменных, как результат RunTime Error 215 при включенной директиве {$Q+}.

EMathError - предок исключений, случающихся при выполнении операций с плавающей точкой.

Потомки EmathError. EInvalidOp Неверная операция - возникает, когда математическому сопроцессору передается ошибочная инструкция. Такое исключение не будет до конца обработано, пока Вы контролируете сопроцессор напрямую из ассемблерного кода. EZeroDivide Попытка деления на ноль.

EOverflow Переполнение с плавающей точкой - возникает как результат переполнения операций с плавающей точкой при слишком больших величинах. Соответствует RunTime Error 205. EUnderflow Исчезновение порядка - возникает как результат переполнения операций с плавающей точкой при слишком малых величинах. Соответствует RunTime Error 206. EinvalidArgument Неверный аргумент математических функций

Самый важный отличительный признак объекта Exception — это все же класс, к которому он принадлежит. Именно факт принадлежности возникшей ИС к тому или иному классу говорит о том, что случилось. Если же нужно детализировать проблему, можно присвоить значение свойству Message. Если и этого мало, можно добавить в объект новые поля. Так, в ИС EinOutError (ошибка ввода/вывода) есть поле ErrorCode, значение которого соответствует произошедшей ошибке — запрету записи, отсутствию или повреждению файла и т. д.

Пример.

try

.FileOpenС с:\myfile.txt', fmOpenWrite); 

except

on E: EinOutError do

 case E.ErrorCode of

ERROR_FILE_NOT_FOUND {=2}: ShowMessage('Файл не найден !');

 ERROR_ACCESS_DENIED {=5}: ShowMessage('Доступ запрещен!'); 

ERROR_DISK_FULL {=112}: ShowMessage ('Диск переполнен!') ;

 end;

  end;

Впрочем, ИС EInOutError возникают только тогда, когда установлена опция компилятора {$IOCHECKS ON} (или иначе {$I+}). В противном случае проверку переменной IOResult (известной еще по Turbo Pascal) нужно делать самому.

5.19.4. Защитные конструкции языка

Для работы с объектами исключительных ситуаций существуют специальные конструкции языка Object Pascal— блоки try…. except и try….finally. Они контролируют выполнение операторов, помещенных внутри блока до ключевого слова except или finally. В случае возникновения исключительной ситуации штатное выполнение вашей программы немедленно прекращается, и управление передается операторам, расположенным за указанными ключевыми словами. Если в вашей процедуре эти блоки отсутствуют, управление все равно будет передано ближайшему блоку, внутри которого возникла ситуация. А уж внутри VCL их предостаточно.

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

Блок try..except применяется для реакции на конкретный тип ситуации.

Блок try...finally используется когда необходимо вернуть выделенные программе ресурсы (или нормально завершить программу – например, закрыть файлы) даже в случае аварийной ситуации.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]