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



1.Классификация ошибок

2. Классы исключений.

3.Предотвращение и обработка ошибок.

Классификация ошибок

Ошибки, которые могут быть в программе, принято делить на три группы:

 - синтаксические;

 - ошибки времени выполнения;

 - алгоритмические;

Синтаксические ошибки, их также называют ошибками времени компиляции (Compile-time error), наиболее легко устранимы. Их обнаруживает компилятор, а программисту остаётся только внести изменения в тексте программы и выполнить повторную компиляцию.

Ошибки времени выполнения, в Delphi они называют исключениями (exceptions) ,тоже, как правило, легко устранимы. Они обычно проявляются уже при первых запусках программы и во время тестирования.

При возникновении ошибки в программе, запущенной из Delphi,среда разработки прерывает работу программы, о чём свидетельствует заключенное в скобки слово Stopped в заголовке главного окна Delphi,и на экране появляется диалоговое окно, которое содержит сообщение об ошибке и информацию о типе(классе) ошибки. На рис.13.1приведен пример сообщения об ошибке, возникающей при попытке открыть несуществующий файл.

После возникновения ошибки программист может либо прервать выполнения программы, для этого надо из меню Run выбрать команду Program Reset,либо продолжить ее выполнение, например по шагам (для этого из меню Run надо выбрать команду Step), наблюдая результат выполнения каждой инструкции.

Если программа запущена из Windows,то при возникновении ошибки на экране также появляются сообщение об ошибке, но тип ошибки (исключения) в сообщении не указывается. После щелчка на кнопке ОК программа ,в которой проявилась ошибка, продолжает (если сможет) работу.

C алгоритмическими ошибками дело обстоит иначе. Компиляция программы, в которой есть алгоритмическая ошибка, завершается успешно. При пробных запусках программа ведёт себя нормально, однако при анализе результата выясняется, что он нервный. Для того чтобы устранить алгоритмическую ошибку приходится анализировать алгоритм, вручную "прокручивать" его выполнение.

Предотвращение и обработка ошибок.

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

Нарушение в работе программы называется исключением. Для обработки исключительных ситуаций применяются так называемые обработки исключений.

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

Обработку исключений (ошибок) берёт на себя автоматические добавляемый в выполняемую программу код, который обеспечивает, в том числе, вывод информационного сообщения.

При обработке исключительных ситуаций Delphi работает с объектами исключений. Так как Delphi - это объектно-ориентированный язык программирования, то и исключительная ситуация - тоже объект. Для работы с этим объектом в Delphi присутствуют специальные конструкции, которые мы рассмотрим далее.

Инструкции обработки исключения в общем виде выглядит так:

try

//   здесь инструкции, выполнение которых может вызвать исключение

except // начало секции обработки исключений

on ТипИсключения1 do Обработка1;

on ТипИсключения 2 do Обработка 2;

on ТипИсключения 3 do Обработка J;

else

// здесь инструкции обработки остальных исключений

end;

где:

try - ключевое слово, обозначающее, что далее следуют инструкции, при выполнении которых возможно возникновение исключений, и что обработку этих исключений берёт на себя программа;

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

on - ключевое слово, за которым следует тип исключения, обработку которого выполняет инструкция, следующая за do;

else - ключевое слово, за которым следует инструкции, обеспечивающие обработку исключений, тип которых не указаны в секции except.

Таким образом, вы размещаете опасный участок когда после слова try,и, если при выполнении этого кода кода произойдёт исключительная ситуация, выполнение когда прекратится и начнут выполняться команды, расположенные после слова except. По умолчанию в среде Delphi 7 настройки отладчика установлены таким образом ,что все исключительные ситуации обрабатываются самим отладчиком, а до команд, расположенных после слова except,дело не доходит . В разделе except могут находится либо только операторы обработки исключений, которые начинаются со слова-приставки on,либо только произвольные операторы , не являющиеся операторами обработки исключений.

Классы исключений

Рассмотрим теперь классы исключений. Они необходимы для обработки конкретных исключительных ситуаций (например, как мы обрабатывали деление на ноль).Мы представляем классы исключений не в иерархии, а в алфавитном порядке :

Exception - базовый класс исключений. Все другие классы исключений являются прямыми или косвенными потомками данного класса;

EAbort - потомок класса Exception. Данный класс исключения не отображает диалоговое окно ошибки при возникновении исключения. Простейшим способом генерации данного исключения является вызов метода Abort ;

EAccessViolation - потомок класса EExtemai. Генерируется при неверной работе с памятью; а EBitsError - потомок класса Exception.Генерируется при ошибке доступа к массиву логических значений;

EComponentError - потомок класса Exception. Возникает при ошибке регистрации или переименования компонента;

EConvertError - потомок класса Exception. Генерируется при ошибке преобразования строк и объектов;

EDatabaseError - потомок класса Exception.Базовый класс для всех ошибок при работе с базами данных;

EDBEditError - потомок класса Exception.Возникает в слуае попытки помещения данных в поле,которое не являются совместимыми с заданной для этого поля маской;

EDivByZero - потомок класса EintError. Возникает при ошибке целочисленного деления на ноль. При делении на ноль чисел с плавающей запятой возникает другое исключение EZeroDivide;

EExternal - базовый класс исключений для всех ошибок;

возникающих при работе с памятью и генерируемых операционной системой;

    EExternalException - потомок класса Eexternal. Исключение с нераспознаваемым кодом;

    EHeapException - потомок класса Exception. Класс исключений, связанный с ошибками при работе с так называемыми "кучами" памяти;

    EintError - потомок класса EExternafl. Базовый класс исключений для всех ошибок, свзяанных с целочисленными математическими вычислениями;

    ElnOutError - потомок класса Exception. ошибка файлового ввода/вывода;

    ElntOverflow - потомок класса EintError. В случае превышения максимального значения целого числа;

    Einvalidcast - потомок класса Exception. Невеорное использование оператора as;

    EinvalidGraphic - потомок класса Exception. Нераспознаваемый графический файл;

    EinvalidOperation - потомок класса Exception. Неверное действие над компонентом;

    EinvalidPointer - потомок класса EHeapException. Неверная операция над указателем.

    EMathError - базовый класс исключений для всех ошибок, связанных с математическими операциями над числами с плавающей точкой;

    EmenuError - потом класса Exception. Ошибка при работе с меню;

    EOleCtrlerror - потомок класса Exception. Ошибка при присоединении элемента управление ActiveX;

    EOleError - потомок класса Exception. Ошибка при работе с автоматизацией OLE;

    EPrinterError - потомок класса Exception. Ошибка вывода на печатающее устройство;

    EpropertyError - потомок класса Exception. Ошибка при установке нового значения свойства компонента;

    ERangeError - потомок класса EintError. Значение целочисленной переменной превысило максимально возможное;

    ERegistryException - ПОТОМОК класса Exception. Ошибка При работе с реестром Windows;

EZeroDivide - потомк класса EMathError. Ошибка деления вещественного числа на ноль.

 


Дата добавления: 2018-04-05; просмотров: 482; Мы поможем в написании вашей работы!

Поделиться с друзьями:






Мы поможем в написании ваших работ!