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

[отпатрулированная версия][отпатрулированная версия]
Содержимое удалено Содержимое добавлено
Метки: с мобильного устройства из мобильной версии
Строка 36:
=== Неструктурная обработка исключений ===
Неструктурная обработка исключений реализуется в виде механизма регистрации [[Функция (программирование)|функций]] или команд-обработчиков для каждого возможного [[Тип данных|типа]] исключения. [[Язык программирования]] или его системные [[Библиотека (программирование)|библиотеки]] предоставляют программисту как минимум две стандартные процедуры: регистрации обработчика и разрегистрации обработчика. Вызов первой из них «привязывает» обработчик к определённому исключению, вызов второй — отменяет эту «привязку». Если исключение происходит, выполнение основного кода программы немедленно прерывается и начинается выполнение обработчика. По завершении обработчика управление передаётся либо в некоторую наперёд заданную точку программы, либо обратно в точку возникновения исключения (в зависимости от заданного способа обработки — с возвратом или без). Независимо от того, какая часть программы в данный момент выполняется, на определённое исключение всегда реагирует последний зарегистрированный для него обработчик. В некоторых языках зарегистрированный обработчик сохраняет силу только в пределах текущего блока кода (процедуры, функции), тогда процедура разрегистрации не требуется. Ниже показан условный фрагмент кода программы с неструктурной обработкой исключений:
<codesource>
УстановитьОбработчик(ОшибкаБД, ПерейтиНа ОшБД)
// На исключение "ОшибкаБД" установлен обработчик - команда "ПерейтиНа ОшБД"
Строка 47:
СнятьОбработчик(ОшибкаБД)
// Обработчик снят
</codesource>
 
Неструктурная обработка — практически единственный вариант для обработки асинхронных исключений, но для синхронных исключений она неудобна: приходится часто вызывать команды установки/снятия обработчиков, всегда остаётся опасность нарушить логику работы программы, пропустив регистрацию или разрегистрацию обработчика.