|
|||
finally. except. Класс Exceptionfinally <операторы> end; Защищенный блок начинается зарезервированным словом try (попытаться [выполнить]) и завершается словом end. Два типа защищенных блоков except (исключить) и finally (в завершение) отличаются способом обработки исключения. В блоке except порядок выполнения операторов таков: сначала выполняются операторы секции try...except; если операторы выполнены без возникновения исключительной ситуации, работа защищенного блока на этом прекращается и управление получает оператор, стоящий за словом end; если при выполнении части tryвозникло исключение, управление получает соответствующий обработчик в секции except, а если таковой не найден - первый из операторов, стоящих за словом else. В блоке finallyоператоры в секции finally...end получают управление всегда, независимо от того, возникло исключение в секции try... finally или нет. Если исключение возникло, все операторы в секции try... finally, стоящие за «виновником» исключения, пропускаются и управление получает первый оператор секции finally...end. Если исключения не было, этот оператор получает управление после выполнения последнего оператора секции try...finally. Обработчики исключений в блоке exceptимеют такой синтаксис:
оn <класс исключения> do <оператор>;
Здесь оn, do - зарезервированные слова; <класс исключения> - класс обработки исключения; <оператор> - любой оператор Delphi, кроме оператора передачи управления goto на метку вне блока except. Внимание: имя класса служит своеобразным ключом выбора, а собственно обработка осуществляется оператором, стоящим за do (этот оператор бывает составным, так что обработка исключения может выполняться произвольным количеством операторов Delphi). Поиск нужного обработчика осуществляется с начала списка вниз до тех пор, пока не встретится класс, способный обрабатывать исключение данного типа. Если подходящего класса не обнаружено, управление передается операторам, стоящим за словом else, а если таковых нет (часть else <операторы> может опускаться), выполняется умалчиваемая обработка исключения. Если для программиста важен, лишь сам факт возникновения исключения и несущественен тип связанной с ним ошибки, он может опустить в секции except...end обработчики вместе со словом else, оставив в ней только необходимый код реакции на любую ошибку:
try ... except ShоwМеssаgе('Ошибка! '); ... end;
Защищенные блоки могут вкладываться друг в друга на неограниченную глубину, так как везде, где в предыдущих описаниях указывался параметр <оператор>, могут использоваться любые операторы Delphi, в том числе и try ... except или try ... finally:
try ... try ... finally
end; except оn EMatchError do begin ... try ... try ... end; ... end; ... end; ... end;
Класс Exception Класс Exception является родительским классом для всех классов-исключений. Этот класс объявляется в модуле SysUtils следующим образом:
|
|||
|