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; |
| Оглавление| |