Введение в программирование - Учебное пособие (Корочкин А. В.)

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

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

WHEN   Имя_Исключения  =>    Последовательность_Операторовт, WHEN Имя_Исключения 1 Имя_Исключения 2 I... I

Глава 10. Исключения

109

 

 

108

Ада 95. Введение в программирование

WHEN OTHERS

=>   Последовательность_Операторов; =>   Последователъностъ_Операторов;

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

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

Общий вид обработчика исключений должен быть следующим:

BEGIN

- - Последовательность_Операторов EXCEPTION

- - Обработчик_Исключений_1

- - Обработчик_Исключений_М END;

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

=>     return     Integer'Last; =>     Fire(x);

П Пример обработчика исключения:

when    CONSRAINT_ERROR when     ALARM 1

Выполнение обработчика исключения определяется не местом его расположения, а зависит от конкретного выполнения программы, то есть связь исключения и обработчика - динамическая. На эту связь также оказывает влияние момент появления исключения - во время предвыполнения описания или во время.выполнения оператора.

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

• в описании подпрограммы, пакета, задачи, защищенного модуля -тогда исключение распространяется на ту часть программы, которая содержит это описание: если описание - библиотечный элемент, то вы­полнение главной процедуры завершается;

• в описании блока - тогда исключение распространяется на охваты^ вающий блок программу;

• в описании тела подпрограммы - тогда исключение распространяет­ся на участок программы, содержащий вызов подпрограммы;

• в описании тела пакета - тогда исключение распространяется на ту часть программы, которая содержит пакет; если пакет - библиотечный, то выполнение главной процедуры завершается ;

• в описательной части задачи - то исключение распространяется на ту часть программы, которая активизировала данную задачу и за­дача завершается.

Если исключение возникло при выполнении оператора в блоке, под­программе, пакете, задаче, защищенном модуле, то его выполнение за­меняется выполнением локального обработчика исключения, если он имеется. В противном случае происходит распространение исключения на другие части программы.

Если исключение появилось:

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

•   в теле пакета, то обработка тела завершается, а для библиотечного модуля - прекращается; если пакет не является библиотечным мо­дулем, то исключение возбуждается в той части программы, которая содержит тело пакета или его след;

•   в задаче - выполнение задачи прекращается;

•   в последовательности операторов обработчика исключение ( но не в блоке ), то выполнение обработчика завершается и распространя­ется новое исключение.

При выполнении задач причиной возбуждения исключения является часто появление исключений при взаимодействии задач во время ран­деву. При этом возможны следующие ситуации :

• вызванная задача завершается или уже завершена перед вызовом входа: исключение TASKING_ERROR возбуждается в вызывающей задаче в точке вызова ;

• вызванная задача становится аварийной во время рандеву ; исклю­чение TASKING_ERROR возбуждается в точке вызова ;

Ада 95. Введение в программирование

110

Глава 10. Исключения

111

 

 

• Исключение возбуждается в операторе accept; в Аде 95 оператор accept может иметь обработчик исключений; если его нет, то исключе­ние распространяется на вызвающую задачу и часть программы, со­держащую оператор принятия accept;