Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
os2.doc
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
248 Кб
Скачать
☆

2.7.4.2. Обработка исключений

Вопрос (

Для обработки исключений следует использовать второй вариант защищенного блока следующего вида:

try

Операторы, которые могут вызвать исключение;

except

Операторы обработки исключения;

end;

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

)Вопрос

В приведенном выше варианте в части except будут обрабатываться все исключения, даже те, на которые эта обработка не рассчитана. Поэтому в части except необходимо уточнить виды обрабатываемых исключений. Это делается следующим образом:

except

on <тип исключения> do <операторы>

end;

Рассмотрим пример процедуры с обработкой исключения:

function Division(Dlm, Dlt : Integer) : Integer;

begin

try

Result := Dlm div Dlt;

except

on EDivByZero do begin

Result := 0;

write('EDivByZero exception!');

end;

end;

end;

При обработке исключения в приведенном примере можно учесть, что EDivByZero - это тип исключения, а может существовать и экземпляр исключения. Эту особенность можно использовать для чтения полей объекта-исключения, например:

except

on E : EDivByZero do begin

Result := 0;

write(E.Message);

end;

end;

Здесь Е - временная переменная для хранения экземпляра исключения.

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

Заключение по разделу 2

Еще раз сопоставим все пять перечисленных методов замены контекста.

  1. Процедуры - самый простой способ замены контекста на основе одного стека.

  2. Сопрограммы - отличаются от процедур наличием собственных стеков каждая.

  3. Процедуры ОС выполняют еще более глубокую замену контекста с включением проверки прав пользователя на этот вызов.

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

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

26

Раздел 2

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]