Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лекции 2 семестр.doc
Скачиваний:
42
Добавлен:
27.05.2015
Размер:
777.73 Кб
Скачать

11. Обработка исключительных ситуаций

Исключительные ситуации в Delphi встречаются постоянно. Исключительная ситуация это такая ситуация, в результате которой генерируется ошибка, и выполнение программы прерывается. Именно потому такая ситуация и называется исключительной. Например, деление на ноль - классический пример исключительной ситуации.

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

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

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

В ходе выполнения программы могут возникать динамические ошибки (ошибки времени выполнения Run Time Errors), которые являются следствием неправильной работы инструкций, процедур, функций или методов программы. Для обработки динамических ошибок введено понятие исключения.Исключение – это результат выполнения некорректного оператора, вызывающий прерывание или полное прекращение работы программы. Обработка исключения состоит в нейтрализации вызвавшей его динамической ошибки.

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

Возникающие при выполнении программы динамические ошибки автоматически преобразовываются средствами Delphi в соответствующие объекты-исключения. Объект-исключение содержит информацию о типе ошибки и при возникновении исключения заставляет программу временно приостановиться. После обработки исключения объект-исключение автоматически удаляется.

При работе в среде Delphi при каждой исключительной ситуации среда перехватывает управление программой. Для отмены реакции среды на исключительную ситуацию необходимо вызвать опцию Tools/Debugger Options и на вкладке Language Exceptions отменить переключатель Stop on Delphi Exceptions.

В Delphi базовым классом для всех исключений служит класс Exception, от которого порождены многочисленные дочерние типы, соответствующие часто встречающимся случаям ошибок ввода/вывода, распределения памяти и т.п. Часто используются классы исключений, представленные в табл. 4.5.

Таблица 11.1. Наиболее используемые классы исключений

Для обработки исключений введены две конструкции: try..finally и try..except.

Конструкция try..finally состоит из двух блоков (try и finally):

try //операторы, выполнение которых может вызвать ошибку finally //операторы, выполняемые всегда, даже в случае ошибки end;

Если в любом из операторов блока try возникает исключение, то управление передается первому оператору блока finally. Если исключение не возникло, то выполняются все операторы обоих блоков.

Конструкция try..finally не обрабатывает исключение, а выполняет действия, которые должны быть произведены даже в случае возникновения ошибки. Например,