Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Lab_Delphi1-4 (2).doc
Скачиваний:
16
Добавлен:
11.11.2019
Размер:
1.18 Mб
Скачать

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

Термин исключительная ситуация (exception) обозначает любую ошибку или ошибочное условие, возникающие в процессе выполнения программы. Примерами исключительных ситуаций являются деление на 0, запись в файл, открытый только для чтения, ошибки при преобразовании типов. Традиционный подход для контроля и обработки подобных ошибок заключается в использовании условных операторов. Однако они загромождают программу, делают ее менее ясной.

Обработку исключений (ошибок) берет на себя автоматически добавляемый в выполняемую программу код, который обеспечивает, в том числе, вывод информационного сообщения. Вместе с тем Delphi дает возможность программе самой выполнить обработку исключения.

Инструкция обработки исключения в общем виде выглядит так:

try

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

except // начало секции обработки исключений

on ТипИсключения1 do Обработка1;

on ТипИсключения2 do Обработка2;

on ТипИсключенияJ do ОбработкаJ;

else

// здесь инструкции обработки остальных исключений

end;

где:

try — ключевое слово, обозначающее, что далее следуют инструкции, при выполнении которых возможно возникновение исключений, и что обработку этих исключений берет на себя программа;

except — ключевое слово, обозначающее начало секции обработки исключений. Инструкции этой секции будут выполнены, если в программе возникнет ошибка;

on — ключевое слово, за которым следует тип исключения, обработку которого выполняет инструкция, следующая за do;

else — ключевое слово, за которым следуют инструкции, обеспечивающие обработку исключений, тип которых не указаны в секции except.

Как было сказано выше, основной характеристикой исключения является его тип. В таблице 13.1 перечислены наиболее часто возникающие исключения.

Если для класса исключительной ситуации существует блок обработки, выполняется часть блока после do и управление передается за блок tryexcept. Порядок блоков обработки имеет значение: вначале проводится распознавание частных исключительных ситуаций, затем – более общих.

Для генерирования исключительной ситуации используется зарезервированное слово raise.

Ниже приведен пример функции, генерирующей исключительную ситуацию:

function StrToPersent(const S: string): Integer;

begin

Result := StrToInt(S);

if (Result < 0) or (Result > 100) then

raise EConvertError.Create(S + 'is not a valid value')

end;

Функция StrToPersent может генерировать исключительную ситуацию класса EConvertError. В следующей функции она распознается и обрабатывается:

function IncPercent(const S: string): string;

begin

try

Result := IntToStr(StrToPercent(S) + 1);

except

on EConvertError do Result := '0';

end

end;

Для корректного освобождения ресурсов приложения часто используется блок try-finally. Синтаксис блока следующий:

try

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

finally

// эти операторы выполняются всегда

end;

При возникновении исключительной ситуации в части try-finally управление передается на часть finally-end. При нормальной работе выполняются все операторы между try и end.

Если возникшая исключительная ситуация программистом не обработана, вызывается обработчик события OnExcept объекта Application. Если этот обработчик не установлен, выводится стандартное окно с текстовым сообщением об ошибке.

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