
Обработка исключительных ситуаций.ppt
- Количество слайдов: 15
Обработка исключительных ситуаций
Исключительная ситуация n Исключительная (или особая) ситуация представляет собой сигнал о произошедшей в приложении ошибке. Деление на ноль, открытие несуществующего файла, выход за пределы динамической памяти Класс Exception – обработка исключений.
Отмена поведения среды
Виды защищенных блоков try защищаемый код finally код завершения end; защищаемый блок except обработчик исключения Else end; блок finally выполняется независимо от того, возникла ли ошибка в процессе выполнения защищаемых операций Внутри части except создаются обработчики особых ситуаций для классов исключительных ситуаций.
Что такое исключительная ситуация? n В Object Pascal исключительные ситуации представляют собой объекты, содержащие информацию, идентифицирующую ошибку и место ее возникновения.
Обработчики исключений n On класс исключения Do оператор* n * любой, кроме Goto
Предопределенные классы исключительных ситуаций для обработки стандартных ошибок n EMath. Error класс-предок исключений, случающихся при выполнении операций с плавающей точкой; n n n Elnvalid. Argument значение параметра выходит за диапазон значений EInvalid. Op передача математическому сопроцессору ошибочной конструкции; EOverflow переполнение разрядов при работе со слишком большими величинами; EUnderflow потеря разрядов при работе со слишком малыми величинами; EZero. Divide деление на ноль; 1
Предопределенные классы исключительных ситуаций для обработки стандартных ошибок n EInt. Error класс-предок исключений, случающихся при выполнении целочисленных операций; n n n EDiv. By. Zero деление на ноль; EInt. Overflow выполнение операций, приводящих к переполнению целых переменных; ERange. Error значение целочисленного выражения выходит за пределы установленного целочисленного типа. Попытка обращения к элементу массива по индексу, выходящему за пределы массива; 1
Предопределенные классы исключительных ситуаций для обработки стандартных ошибок n n EList. Error обращение к элементу списка (String, List, TString. List) по индексу, выходящему за пределы допустимых значений; EIn. Out. Error ошибки при операциях с файловой системой. Код ошибки возвращается в локальной переменной Error. Code, которая может принимать следующие значения: n 2 файл не найден n 3 неверное имя файла n 4 слишком много открыто файлов n 5 отказ в доступе n 100 конец файла n 101 диск полон n 106 неверная операция ввода; 1
Предопределенные классы исключительных ситуаций для обработки стандартных ошибок n EConvert. Error ошибки преобразования типов (простых, объектных). 1
Устойчивое к ошибкам приложение, записывающее данные в файл: begin (Е) - временный объект assignfile(f, 'data. dan'); особой ситуации который try может использоваться в append (f); обработчике исключения. try Временный объект особой ситуации имеет тот же тип, writeln (f, s); что и объект исключения, finally который он обозначает closefile(f); (ESome. Exception). end; except on E: EIn. Out. Error do if E. Error. Code = 2 then if Message. Dlg('Файл не найден. Создать его? ', mt. Error, [mb. Yes, mb. No], 0)=mr. Yes then File. Create('data. dan '); end;
Если важен сам факт возникновения исключения и тип ошибки неважен Try. . . Except Show. Message(‘Ошибка!’); . . . End;
Класс Exception является родительским классом для всех классов-исключений Этот класс объявляется в модуле Sys. Utils следующим образом: type Exception = class(TObject) private FMessage: String; FHelp. Context: Integer; public constructor Create(const Msg: String); constructor Create. Fmt(const Msg: String; const Args: array of const); constructor Create. Resddent: Integer); constructor Create. Res. Fmtddent: Integer; const Args: array of const); constructor Create. Help. Cconst Msg: String; a. Help. Context: Integer); constructor Create. Fmt. Help(const Msg; String; const Args: array of const; и т. д.
Вызов исключения зарезервированное слово raise n n Если это слово встречается в секции try. . . exception или try. . . finally, немедленно начинают свою работу секции соответственно except. . . end и finally. . . end. Если оно встречается в except. . . end или finally. . . end, считается, что данный защищенный блок на текущем уровне вложенности (блоки могут быть вложенными) завершил свою работу и управление передается вышестоящему уровню.
Вызов исключения Слово raise вызывает исключение самого общего класса Exception. Если программист желает возбудить исключение конкретного типа (не важно — стандартного или собственного), он должен явно указать класс создаваемого в этот момент объекта с помощью вызова его конструктора. Например, следующий оператор возбуждает ошибку ввода-вывода: raise EIn. Out. Error. Create('Ошибка!'); Такой прием — единственная возможность возбудить нестандартное исключение, обрабатываемое пользовательским классом.
Обработка исключительных ситуаций.ppt