Отладка программы: Предотвращение и обработка ошибок

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

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

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

 

 
try // здесь инструкции, выполнение которых может вызвать исключение except // начало секции обработки исключений on ТипИсключения1 do Обработка1; on ТипИсключеиия2 do Обработка2; on ипИсключеиия3 do Обработикаn; else // здесь инструкции обработки остальных исключений end;

где: 

  • try — ключевое слово, обозначающее, что далее следуют инструкции, при выполнении которых возможно возникновение исключений, и что обработку этих исключений берет на себя программа;
  • except — ключевое слово, обозначающее начало секции обработки исключений. Инструкции этой секции будут выполнены, если в программе возникнет ошибка;
  • on - ключевое слово, за которым следует тип исключения, обработку которого выполняет инструкция, следующая за do;
  •  else — ключевое слово, за которым следуют инструкции, обеспечивающие обработку исключений, тип которых не указаны в секции except.

 Как было сказано выше, основной характеристикой исключения является его тип. В таблице 13.1 перечислены наиболее часто возникающие исключения и указаны причины, которые могут привести к их возникновению. 

 

 

Следующая программа, вид диалогового окна которой приведен на рис.13.3, а текст— в листинге 13.1, демонстрирует обработку исключений при помощи инструкции try.

Рис. 13.3. Диалоговое окно программы

Листинг 13.1. Обработка исключения типа EZeroDivide

unit UsTry ; interface uses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms,Dialogs, StdCtrls; type TFonru = class(TForm) Labell: TLabel; Label2: TLabel; Label3: TLabel; Label4: TLabel; Editl; TEdit; // напряжение Edit2: TEdit; // сопротивление Labelb: TLabel; // результат расчета - ток Buttonl: TButton; //кнопка Вычислить procedure ButtonlClick(Sender: TObject); private ! Private declarations } public { Public declarations } end; var Forml: TForml; implamentation (SR *.DFM) procedure TForml.ButtonlClick(Sender: TObject); var u: real; // напряжение r: real; // сопротивление i: real; // TOJC begin Label5.Caption := ' '; try // инструкции, которые могут вызвать исключение (ошибку) u := StrToFloat(Editl.Text); г :- StrToFloat(Edit2.Text|; i :- u/r; except // секция обработки исключений on EZeroDivide do // деление на ноль begin 5поШеззаде('Сопротивление не может быть равно нулю!1); exit; end; on EConvertError do // ошибке преобразования строки в число begin ShowMessage('Напряжение и сопротивление должны быть ' + 'заданы числом.' +#13+ 'При записи дробного числа используйте запятую.'); exit; end; end; Labels.Caption := FloatToStr(i) + ' A'; end; end.

 

 

В приведенной программе исключения могут возникнуть при вычислении величины тока. Если пользователь задаст, что сопротивление равно нулю, при выполнении инструкции i:=u/r возникнет исключение EZeroDivide. Если неверно будет введено числовое значение, например, для разделения целой и дробной частей числа вместо запятой будет использована точка, то возникнет исключение типа EConvertError. Оба исключения обрабатываются одинаково: выводится сообщение, после чего процедура обработки события onclick завершает свою работу.

������� ������ ��� dle ������� ��������� ������

Помоги проекту! Расскажи друзьям об этом сайте: