Читайте также:
|
|
Для обеспечения возможности использования локальных (специализированных) обработчиков исключений в состав языка введены две конструкции try.. finally и try.. except. Обе конструкции имеют похожий синтаксис, но различное назначение. Блоки try включают операторы программы, которые могут вызвать исключительную ситуацию.
Конструкция try.. finally состоит из двух секций и имеет следующий формат:
Try
// Операторы, выполнение которых может вызвать ошибку
finally
// Операторы, которые должны быть выполнены даже в случае ошибки
end;
Формат конструкции try.. except следующий:
Try
// Операторы, выполнение которых может вызвать ошибку
except
// Операторы, которые должны быть выполнены в случае ошибки
end;
В каждой из этих конструкций выполняются операторы секции try, если в результате возникает исключительная ситуация, то управление передается первому оператору секции finally или секции except. Если исключительная ситуация не возникла, то в случае конструкции try.. finally последовательно выполняются все операторы обеих секций, в случае использования конструкции try.. except операторы секции except не выполняются.
procedure TForm1.Button1Click(Sender: TObject);
begin
try
edit1.Text:=FloatToStr(2*StrToFloat(Edit1.Text));
except
If MessageDLg('Содержимое поля Edit1 равно '+Edit1.Text+#10#13+'Это не число!',mtError,[mbOk],0)=mrOk Then
begin
Edit1.text:='';
Edit1.SetFocus;
end;
end;
end;
Секция except может быть разбита на несколько частей конструкциями on.. do, позволяющими анализировать класс исключительной ситуации с целью ее обработки. Конструкция on.. do применяется в случаях, когда действия зависят от класса исключения:
On <Идентификатор: класс исключения> do
<оператор обработки исключения этого класса>;
else
<оператор>;
procedure TForm1.Button1Click(Sender: TObject);
begin
try
label1.Caption:=FloatToStr(StrToFloat(Edit1.Text)/FloatToStr);
except
On EConvertError do
If MessageDLg('Содержимое поля Edit1 равно '+Edit1.Text+#10#13+'Это не число!',mtError,[mbOk],0)=mrOk Then
begin
Edit1.text:='';
Edit2.Text:='';
Edit1.SetFocus;
end;
On EZeroDivide do
If MessageDLg('Делить на ноль нельзя',mtError,[mbOk],0)=mrOk Then
begin
Edit2.text:='';
Edit2.SetFocus;
end;
end;
end;
Замечание. Указанные процедуры работают только при запуске откомпилированной программы, при запуске из Delphi действует глобальный обработчик среды.
Конструкции try могут быть вложенными и размещаться одна в другой.
При необходимости исключительную ситуацию можно вызвать программно.
Дата добавления: 2015-01-29; просмотров: 34 | Поможем написать вашу работу | Нарушение авторских прав |