Обработка исключительных ситуаций
Исключительная ситуация возникает при выполнении некорректной математической операции, такой как деление на ноль. Потенциально любой оператор программы может стать причиной исключительной ситуации. Однако некоторые операторы относительно безопасны, и ваша задача при написании устойчивой программы состоит в основном в том, чтобы правильно решить, для каких операторов нужна защита, а какие безопасны.
Вот некоторые типы операций, которые могут привести к исключительным ситуациям:
· обработка файла;
· выделение памяти;
· работа с ресурсами системы;
· работа с объектами и формами, создаваемыми во время выполнения программы;
· аппаратные конфликты и конфликты операционных систем.
Ключевые слова, используемые для обработки исключительных ситуаций.
В Object Pascal есть несколько ключевых слов для создания и обработки исключений. Это try, except, on-do-else, finally, raise и at.
Блоки защищенных опереаторов |
Блок защищенных операторов - основное средство для обработки исключительных ситуация. Ниже показана схема создания блока защищенных операторов с помощью блоков try и except. Обратите внимание, что конструкция заканчивается ключевым словом end;
|
|
try
{операторы, которые могут вызвать ошибку(сгенерировать исключение)}
except
{опереаторы для обработки сгенерированных исключений}
end;
Этот пример демонстрирует возникновение исключительной ситуации при делении на ноль.
procedure TForm1.Button1Click(Sender: TObject); Var I, J, K: integer; begin I:=0; J:=10; try K:= J div I; showmessage(inttostr(k)); except Showmessage ('Ошибка! Деление на ноль.'); end; end; |
! | Внимание! При тестировании исключительных ситуаций желательно отключить утилиту отслеживания сообщений WinSight32, если она запущена. Также, если вы используете Delphi 4, выберите команду Tools => Debugger Options и на вкладке Language Exception снимите флажок Stop on Delphi Exception. Теперь исключения не будут отлавливаться средой Delphi и управление исключительными ситуациями полностью предается вашему приложения. |
После возникновения исключительной ситуации в блоке try выполнение немедленно переходит к первому оператору блока except. После генерирования исключительной ситуации дальнейшие операторы блока try не выполняются.
После обработки исключительной ситуации в блоке except продолжается нормальное выполнение операторов процедуры или функции, размещенных после защищенного блока.
Блоки защищенных ресурсов |
Вывод сообщений об ошибке - это только один аспект обработки исключительных ситуаций. Устойчивое приложение должно восстанавливать стабильное состояние системы при возникновении аварийных ситуаций. Для создания блоков защищенных ресурсов используют блоки try и finally.
|
|
Схема создания блока защищенных ресурсов:
try
{операторы, которые могут вызвать ошибку(сгенерировать исключение)}
finally
{освободить ресурс; гарантированно будет выполнено}
end;
{продолжить, если в блоке try не возникло исключительных ситуаций}
Операторы блока finally выполняются всегда, независимо от того, генерируется ли в блоке try исключение. Обычно операторы блока finally служат для освобождения памяти, закрытия файлов и выполнения других необходимых операций для восстановления стабильности системы при возникновении исключительной ситуации.