Студопедия.Орг Главная | Случайная страница | Контакты | Мы поможем в написании вашей работы!  
 

Блок обработки исключений Try..Except



Блок обработки исключений Try..Except (от англ. Try — пробовать и Except — кроме) пытается выполнить заданный фрагмент программы, а в случае появления исключения — передает управление специальному обработчику, расположенному в секции Except:

Try

<Фрагмент программы>

Except

On <Класс исключения> Do «Обработчик исключения>;

…..........................................................................................

On <Класс исключения> Do <Обработчик исключения>;

Else «Обработчик по умолчанию>;

End;

Таким образом, если в контролируемом Фрагменте программы, расположенном между ключевыми словами Try и Except, произошло исключение, то управление передается в секцию Except. В секции Except производится поиск Обработчика, который соответствует классу выброшенного исключения. Если такой обработчик не найден, то вызывается Обработчик по умолчанию, находящийся после ключевого слова Else.

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

Обратим внимание на некоторые особенности работы блока Try..Except.

1. Если в секции Except не используется ни одной структуры On..Do, a, соответственно, и ключевого слова Else, то есть секция Except представляет собой простую последовательность каких-либо команд, то содержание этой секции считается обработчиком любого исключения.

2. При определении обработчика исключения используются правила совместимости типов, поэтому для обработки исключений разных типов, классы которых являются наследниками от одного и того же класса, может быть использован родительский класс. Таким образом, обработчик On Exception Do... будет являться обработчиком любого исключения, так как все классы исключений являются наследниками класса Exception.

3. Если Обработчик исключения в результате своей работы вызовет еще одно исключение, оно будет обрабатываться по общим правилам. Такое исключение может быть обработано и программно, то есть текст обработчика исключения может быть в свою очередь заключен в блок обработки.

4. Если для возникшего исключения подобран обработчик, то сообщение пользователю не выдается.

Приведем пример функции, возвращающей частное двух своих параметров (листинг 3.17). Если во время расчета частного происходит ошибка, то в качестве значения функции будет возвращено значение константы NaN (от англ. NaN — Not a Number — не число), описанной в стандартном модуле Math. Для реакции на исключительные ситуации функции использован простейший вариант блока обработки, не содержащий конструкции On..Do и ключевого слова Else.

Листинг 3.17. Использование блока обработки исключений Try..Except

Unit UsingTryExcept1;

Interface

Function MyDiv(A, B: Double): Double;

Implementation

Uses Math;

Function MyDiv(A, B: Double): Double;

begin

Try {Начало защищенного фрагмента}

Result:= A / В;

Except {Начало секции обработки исключительных

ситуаций}

Result:= NaN;{В случае ошибки функция возвращает

результат NaN}

end; {Окончание блока обработки}

end;

End.





Дата публикования: 2014-11-02; Прочитано: 534 | Нарушение авторского права страницы | Мы поможем в написании вашей работы!



studopedia.org - Студопедия.Орг - 2014-2024 год. Студопедия не является автором материалов, которые размещены. Но предоставляет возможность бесплатного использования (0.006 с)...