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

Var f: File; begin AssignFile(f, 'Somefile.Ext'); try // оператор, в котором возможна ошибка Reset(f); // работы с файлом finally CloseFile(f) end;

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

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

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

Например,

var f: File; begin AssignFile(f, 'Somefile.txt'); try //оператор, в котором возможна ошибка Reset(f); // работы с файлом except ShowMessage(‘Ошибка работы с файлом Somefile.txt’); CloseFile(f) end end;

Блок except можно разбить на несколько частей с помощью конструкции on..do, позволяющей анализировать класс исключения для его более удобной и полной обработки:

try Оператор1; Оператор2; . . . except on Идентификатор1: класс исключения do Оператор обработки ИС этого класса; on Идентификатор2: класс исключения do Оператор обработки ИС этого класса; . . . else Операторы обработки исключения по умолчанию end;

При возникновении исключительной ситуации конструкции on..do просматриваются последовательно, в порядке их описания. Каждый тип исключительной ситуации, описанный после ключевого слова on, обраба- тывается именно этим блоком: только то, что предусмотрено в нем, и бу- дет реакцией на данную ситуацию. Если при этом обработчик родитель- ского класса стоит перед дочерним, последний никогда не получит управ- ление. Если класс возникшего исключения не совпадает с проверяемым классом, то выполняется оператор после слова else. Блок else является необязательным и может отсутствовать.

Идентификатор – это локальная переменная класса исключения, ко- торую можно использовать для доступа к объекту возникшего исключения внутри конструкции on..do. Идентификатор (произвольное имя, заданное программистом) является необязательным элементом и может отсутство- вать, при этом не ставится и разделительный знак двоеточия (:). Стандартная обработка подразумевает вывод на экран сообщения с указанием типа ошибки, имени модуля и адреса, где она имела место. Од- нако ее легко переопределить:

try U:= 220.0; R:= 0; I:=U/R; except on EZeroDivide do ShowMessage('Короткое замыкание!') end;

Можно обработать исключение со стандартным сообщением кода ошибки. Например:

try Reset(f); while not EOF(f) do begin … end; // возможна ошибка работы с файлом Close(f); except on E:EInOutError do ShowMessage(′При выполнении файло- вой операции’ + #13#10 + ‘возникла ошибка №′ + IntToStr(E.ErrorCode)) end;