Генерация исключительной ситуации

ЗАДАНИЕ

1. Закон Республики Казахстан от 07.05.1997 «О гражданской обороне»

2. Аксиома о потенциальной опасности

3. Глоссарий

Классы иерархии Exception обладают несколькими видами полезных конструкторов, которые можно применять для искусственной генерации соответствующей исключительной ситуации.

Таблица 1. Конструкторы классов иерархии Exception

Конструктор Параметры
Create(const Msg: string) Параметр — строка, которая будет отображаться в диалоговом окне, информирующем о возникновении исключительной ситуации
CreateRes(ResStringRec: PresStringRec) Overload; Параметр — строка сообщения, которая загружается из ресурсов программы  
CreateFmt (const Msg: string const Args: array of const) CreateResFmt(ResStringRec: PresStringRec; const Args: array of const); overload; Массив Args содержит значения, на основе которых с использованием строки форматирования Msg (см. функцию Format) или ResStringRec (загружается из ресурсов программы) формируется результирующее сообщение  
CreateHelp (const Msg: string AHelpContext: Integer);   Идентификатор раздела справки AHelpContext указывает, где пользователь сможет подробнее узнать о возникшей ошибке. Справочная система для текущей программы должна быть создана заранее

Создание объекта и вызов нужного конструктора осуществляется с помощью клю­чевого слова raise:

if N < 1 then

raiseException.Create('Значение переменной N меньше 1') ;1

Стандартные классы исключительных ситуаций

В библиотеках системы Delphi 7 имеется немало классов, ответственных за обра­ботку различных исключительных ситуаций. В отличие от остальных типов Паска­ля, названия которых принято записывать начиная с буквы Т, имена этих классов начинаются с буквы Е (Exception). Основные классы исключительных ситуации приведены в табл. 2

Таблица 2. Основные классы исключительных ситуаций

Имя класса Когда возникает
EAbort Данный класс предназначен для формирования и обработки «невидимых» для пользователя ошибок и используется разработчиками для управления ходом выполнения программы. Диалоговое окно с сообщением об ошибке не показывается  
EAbstractError Попытка выполнения абстрактного метода
EAccessViolation Обращение к недоступной области памяти, например при выходе индекса за границы массива
EAssertionFailed Значение выражения в процедуре Assert равно False
ECoritrolC Нажата комбинация клавиш CTRL+C в консольном приложении
EConvertError Попытка неверного преобразования типов, например при вызове StrToInt('aaa')
EDivByZero Деление на ноль
EExternal Неверное функционирование системы Windows
EExternalException   Невозможность распознать исключительную ситуацию средствами Delphi 7
EHeapException Неверное динамическое распределение памяти или некорректная работа с указателями
EFileStreamError Ошибка ввода/вывода при использовании файла, название которого указано в параметре FileName данного класса
EInOutError Ошибка файлового ввода/вывода
EIntError Базовый класс, на основе которого созданы классы исключительных ситуаций при работе с целыми числами
EIntOverflow Слишком большой результат при операции с целыми числами
ElntfCastError Неверное приведение типа объекта с помощью операции as во время обращения к интерфейсу
EInvalidCast Неверное приведение типа с помощью операции as
EInvalidOp Неверная операция над числами с плавающей запятой
EInvalid Pointer Неверная операция при работе с указателями
EMathError Базовый класс, на основе которого созданы классы исключительных ситуаций при работе с числами с плавающей запятой
EOutOfMemory Нехватка памяти
EOverflow Переполнение при выполнении операции над числами с плавающей запятой
EPackageError Некорректная работа с пакетами (см. далее). Возникает только на этапе проектирования в среде Delphi 7
EPrivilege Попытка выполнить неразрешенную привилегированную инструкцию процессора
EPropReadOnly Попытка занесения значения в свойство объекта, доступное «только для чтения»
ERangeError Значение выражения целого типа выходит за допустимый для этого типа диапазон
EStackOverflow Нехватка памяти в стеке. Возникает, когда используются слишком объемные локальные переменные (они создаются и хранятся в стеке) или когда слишком длинна последовательность вызовов вложенных подпрограмм
EUnderflow Результатом выражения над числами с плавающей запятой является число, которое слишком мало для его представления в программе
EVariantError Некорректное использование переменных типа Variant например при попытке неверного приведения типов
EWin32Error Ошибка 32-разрядной версии Windows
EZeroDivide Деление на ноль

 

Иногда исключительные ситуации используют, чтобы изменить порядок выполнения операторов программы. Если, например, обнаружена ошибка при работе какого-либо метода, желательно не просто завершить его работу, а передать управление в часть программы, ответственную за исключительные ситуации. Для этого обычно применяют процедуру Abort (без параметров), тенериф ющую исключительную ситуацию класса EAbort.