11.2. ОБРАБОТЧИКИ ИСКЛЮЧЕНИЙ

Ответная реакция на одно или несколько исключений определяется обработчиком исключения.

обработчик - исключения :: =   when выбор-исключения { | выбор-исключения) => последовательность-оператороввыбор-исключения ::= имя-исключения | others

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

begin   последовательность - операторов exception   обработчик - исключения   {обработчик-исключения}end

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

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

Пример:

begin   -- последовательность операторов exception   when SINGULAR | NUMERIC.ERROR =>      PUT(" MATRIX IS SINGULAR ");   when others =>      PUT(" FATAL ERROR ");      raise ERROR;end;

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

Ссылки: видимость 8.3, имя 4.1, исключение 11, настраиваемое тело 12.2, настраиваемый модуль 12.1, обработка исключения 11.4, оператор блока 5.6, оператор возбуждения 11.3, оператор возврата 5.8, последовательность операторов 5.1, раздел описаний 3.9, тело задачи 9.1, тело модуля 9, 9.1, тело пакета 7.1, тело подпрограммы 6.3, тело функции 6.3.