Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
_Delphi_1курс лекции / Тема 19 Исключения.doc
Скачиваний:
46
Добавлен:
23.03.2015
Размер:
99.84 Кб
Скачать

Исключения 7 Исключения Исключения и их стандартная обработка

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

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

Если исключение не перехвачено нигде в программе то оно обрабатывается методом TApplicatiun.HandleExctiption. Он обеспечивает стандартную реакцию программы на большинство исключений — выдачу пользователю краткой информации в окне сообщений и уничтожение экземпляра исключения. Вы, наверняка, сталкивались с такими стандартными сообщениями,как: целочисленное деления на нуль, попытка открыть не существующий файл или попытка преобразовать функцией StrToInt строку “1.5” в целое число.

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

Если хотите, то можете отключить появление этих сообщений. Для этого надо выполнить команду Tools | Debugger Options, в открывшемся диалоговом окне выбрать страницу Language Exceptions и на ней выключить опцию Stop On Delphi Exceptions. Если не принять соответствующих мер, то при генерации исключений к неприятностям прекращения вычислений могут добавиться еще неприятности, связанные с так называемой у течкой ресурсов. Под этим подразумеваются потери динамически распределяемой памяти, незакрытые файлы, не уничтоженные временные файлы на диске и прочий “мусор”. Например, пусть вы выполняете некоторую программу, в которой имеются следующие операторы:

AssignFile (F,'а.tmp');

Rewrite(F);

New(P);

Erase(F);

…..

Dispose(P);

Вы открываете временный файл с именем a.tmp, чтобы хранить в нем какие-то промежуточные данные вычислений. В конце работы вы намерены уничтожить его процедурой Erase. Вы динамически выделяете некоторую память процедурой New, намереваясь освободить ее, когда она вам больше не будет нужна, процедурой Dispose. Но если в промежуточных операторах, помеченных выше точками, возникнет исключение, то вычисления прервутся и процедуры Erase и Dispose не будут выполнены. В результате память, выделенная процедурой New, останется недоступной, а на диске сохранится временный и уже ненужный файлa.tmp.

Помимо указанного, стандартная обработка исключений программой имеет еще один недостаток — пользователь остается в полном недоумении, что же ему дальше делать? И не только не очень квалифицированный пользователь, которого сообщения на английском языке могут повергнуть в шок. Даже опытному человеку невозможно порой догадаться, что же в вашей программе делится на нуль и как этого можно избежать. Наверное, каждый попадал в подобные ситуации, даже применяя профессионально сделанные программы, включая Windows.