Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лекции по курсу.docx
Скачиваний:
107
Добавлен:
24.02.2016
Размер:
2.8 Mб
Скачать

6.4. Защищенные блоки

Для перехвата исключительных ситуаций и описания реакций на их возникновение в Паскале предусмотрены операторы организации защищен­ного блока try...end; двух видов (Except и finally):

try //попытаться выполнить

<последовательность защищенных операторов> except //обработчики исключительных ситуаций: on <тип искл. ситуации 1 > do <оператор-обработчик 1 >;

On <тип искл. ситуации k> do <оператор-обработчик k>; else //может отсутствовать

<операторы выполняемые если перехваченная ситуация не обнаружена среди типов ситуаций 1-e-k> end;

<следующий оператор>;

Здесь между except и else приводится список нескольких стандартных типов ситуаций между ключевыми словами on...do и соответствующих каж­дому из них операторов-обработчиков, выполняемых, если возникает эта си­туация.

try

<последовательность защищенных операторов> finally

<последовательность операторов, которые выполняются всегда, неза­висимо от того перехвачена ситуация или нет> end;

<следующий оператор>

Эти блоки отличаются лишь способом обработки перехваченной в По­следовательности защищенных операторов> исключительной ситуации. Если все операторы в этой последовательности выполнялись без возникновения исключительной ситуации, то в блоке Except управление передается на <сле­дующий оператор>, в блоке finally на оператор, следующий за словом finally. Если при выполнении одного из защищенных операторов возникла исключи­тельная ситуация, то следующие за ним защищенные операторы пропускают­ся, причем в блоке finally управление передается опять на оператор, следую­щий за словом finally. В блоке же Exception управление передается тому опе­ратору-обработчику, <тип искл. ситуации> которого соответствует возник­шей ситуации, и после его выполнения - <следующему оператору>. Если в списке операторов-обработчиков не обнаружен тип возникшей ситуации, то управление передается операторам, стоящим между else...end. Если при этом область else отсутствует, то выполняется стандартная обработка ситуации, предусмотренная в среде Delphi. Следует помнить, что поиск нужного обра­ботчика осуществляется с начала списка вниз до первого, соответствующего. Поэтому, если в списке имеется несколько типов ситуаций, соответствующих возникшей, то выполняется обработчик встретившийся первый.

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

try

<последовательность защищенных операторов> except

<операторы, которые выполняются при возникновении ИС>

End;

которая отличается от блока finally тем, что область <операторы.. .> здесь выполняется только в случае возникновения исключительной ситуации.

Защищенные блоки могут вкладываться друг в друга на любую глуби­ну, причем в любой области, где возможно вставить оператор try...end.

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

Тип. Искл. си­туаций

Исключительная ситуация

EAbort Любая исключительная ситуация

EArrayError

Ошибка при операциях с массивами (например, индекс выходит за пределы массива).

EConvertError

Ошибка преобразования строки в другие типы данных.

EDivByZero Целочисленное деление на ноль.

EintOverFlow

Переполнение при операции с целыми числами включить {$Q+}.

EZeroDivide Деление на ноль действительных чисел.

EOverFlow

Переполнение при работе с действительными числами.

EassertionFiled

Намеренная ситуация генерируемая с помощью процедуры Assert {$C+}.