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

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

Исключение (exception) — это результат выполнения некорректного оператора, что привело к возникновению ошибки. В языке Object Pascal для обработки исключений предназначена специальная конструкция:

try

 //Операторы, которые могут привести к возникновению исключения

except

 //Операторы, выполняемые в случае возникновения исключения

end;

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

В частности, в блоке except можно обрабатывать исключения в зависимости от их типа с помощью конструкции

except

 on Тип_исключения1 do Блок_операторов1;

 on Тип_исключения2 do Блок_операторов2;

 …

 on Тип_исключенияN do Блок_операторовN;

end;

Типу исключения соответствует имя класса, производного от класса Exception. В отличие от других классов Delphi, имена классов исключений начинаются к латинской буквы "E". Перечислим некоторые из этих классов:

• EZeroDivide — деление на ноль;

• EAccessViolation — ошибка доступа к памяти;

• ERangeError — выход значения за границы допустимого диапазона;

• EStackOverflow — переполнение стека памяти из-за слишком больших переменных или чрезмерно большого количество рекурсивных вызовов процедур (вызов процедуры самой себя);

• EConvertError — ошибка преобразования (например, строки в число);

• EDatabaseError — ошибка при работе с базой данных;

• EOutOfMemory — переполнение памяти;

• EFCreateError — ошибка создания файла;

• EFilerError — ошибка чтения/записи при работе с файлом;

• EFOpenError — ошибка открытия файла;

• EIniFileException — ошибка при работе с INI-файлом;

• EInOutError — ошибка ввода-вывода.

Если тип исключения точно неизвестен, то для его обработки можно воспользоваться следующей конструкцией:

except

 on E: Exception do Блок_операторов;

end;

При этом в блоке операторов после ключевого слова do можно обращаться к свойству E.Message, которое содержит строку с описанием ошибки.