Мы уже обращали внимание на ошибки, возникающие в процессе выполнения программы, на так называемые исключения (с. 13). Это динамические ошибки, причиной которых чаще всего являются недопустимые исходные данные для совершаемых операций. При выполнении программы такие ошибки вызывают генерацию средой объектов специального вида, характеризующих возникшую исключительную ситуацию. Сразу после их обработки соответствующими процедурами объекты-исключения уничтожаются. Если исключение нигде в программе не перехвачено для адекватной обработки (как это сделать, будет сказано ниже), то оно вызывает стандартную реакцию с выдачей на экран сообщения. После запуска содержащей ошибки программы на выполнение командой Run/Run (<F9>) Debugger (отладчик) выведет сообщение об этой ошибке. Применительно к
Теперь о том, как избежать описанной нежелательной ситуации. Генерируемые в случае ошибок исключения могут обрабатываться с помощью блока try … except. Блок имеет следующую конструкцию:
try
< Исполняемые операторы >
except
< Операторы, исполняемые при генерации исключения >;
end;
Операторы блока except выполняются только в случае генерации исключения в операторах блока try. В разделе except можно предусмотреть обработку разных типов возникающих исключительных ситуаций с помощью оператора:
on < Класс исключения > do < Оператор >;
Таблицы классов исключений, базовым для которых служит класс Exception, приведены в [1, 3]. Рассмотрим простой пример возможной обработки некоторых исключений.
var
A, B, q : real;
begin
try
A := StrToFloat(Edit1.Text); // Возможен ввод с разделяющей точкой
B := StrToFloat(Edit2.Text);
q := sqrt(A/B); // Возможно деление на ноль
Edit3.Text := FloatToStr(q);
except
on EConvertError do ShowMessage('Неверный ввод данных');
on EZeroDivide do ShowMessage('Деление на ноль');
end;
end;