Исключения (exceptions) – это способ передачи информации об ошибке времени выполнения или о других исключительных ситуациях из того места, которое первым ее обнаружило, в код, предусмотренный для обработки таких ситуаций. В конечном итоге ошибки обусловлены неполной проработкой всех вариантов работы программы. В последующих версиях программы обнаруженные ошибки можно попытаться устранить, однако многое можно предусмотреть и сразу.
Особенности:
Обработка исключительных ситуаций или исключений отличается от традиционной обработки тем, что она позволяет отделить код, который обнаруживает ошибку, от кода, который реагирует на нее, а также тем, что предоставляет автоматический и ненавязчивый канал связи между этими двумя частями кода. Код, обнаруживающий ошибку, возбуждает исключения, сигнализируя о ее появлении. Код, реагирующий на сигнал ошибки, называется обработчиком исключения. Когда исключение возбуждено, начинается поиск подходящего обработчика исключения. После нахождения управление передается ему, и программа никогда не возвращается к коду, который вызвал исключение. После выполнения кода обработчика исключений либо продолжается выполнение программы с оператора, следующего за обработчиком, либо продолжается поиск другого обработчика событий. Это может кардинально изменить ход выполнения программы.
Модель исключительных ситуаций в Object Pascal является невозобновляемой (non-resumable). При возникновении исключительной ситуации вы уже не сможете вернуться в точку, где она возникла, для продолжения выполнения программы (это позволяет сделать возобновляемая (resumable) модель). Невозобновляемые исключительные ситуации разрушают стек, поскольку они сканируют его в поисках обработчика; в возобновляемой модели необходимо сохранять стек, состояние регистров процессора в точке возникновения ошибки и выполнять поиск обработчика и его выполнение в отдельном стеке. Возобновляемую систему обработки исключительных ситуаций гораздо труднее создать и применять, нежели невозобновляемую.
В Delphi исключительные ситуации появляются в форме объектов. Они возбуждаются и существуют до тех пор, пока исключение не будет обработано.
Обработка исключительной ситуации всегда уничтожает экземпляр исключения. Однако программист должен не только уметь обрабатывать исключения, но и правильно возбуждать исключения при возникновении ошибок.
Классы исключений
Современное направление в ООП использует классы и их экземпляры для работы с исключениями. Базовым классом для всех классов исключений в Delphi является класс Exception, непосредственный потомок от класса ТОbject. Это тот тип, который служит обработчиком по умолчанию для всех исключительных ситуаций.
Все классы исключения принято именовать с буквы «Е». Списки стандартных исключений, объявленных в Delphi, можно найти в литературе.
Класс Exception определен в модуле SysUtils примерно следующим образом : Базовый класс включает поле FMessage строкового типа, объявленное в разделе Private. Оно доступно с помощью свойства Message, имеющего прямой доступ к полю при чтении и записи его значения. Именно эта строка выводится при обработке исключительной ситуации по умолчанию.
Есть ещё конструкторы для использования справочной системы
Конструктор Create принимает один параметр Msg типа String. Эта строка должна быть информативной или осмысленной строкой, представляющей исключение, либо класс исключений. И ещё много конструкторов.