Примеры исключений с Try … Finally …

В конструкции Try-Finally, инструкция Finally выполняется независимо от того, что произойдет в предложении Try.
try
{операторы, способные создать исключительную ситуацию};
finally
{защищенные операторы, выполняемые в любом случае};
end;

ПРИМЕР 1: Написать программу для вычисления результата от деления одного числа на другое. Числа вводятся с клавиатуры. При выполнении деления использовать конструкцию try … finally

var
number_1, number_2 :Integer;
result:real;
begin
number_1:=StrToInt(Edit1.Text);
number_2:=StrToInt(Edit2.Text);
Try
result := number_1/ number_2;
ShowMessage(‘ result = ‘+FloatToStr(result));
Finally
ShowMessage(‘Второе число равно нулю. Деление на число ноль. Введите другое число и повторите попытку’);
end;
end;

 

ПРИМЕР 2: Исправить программу примера 1, таким образом, чтобы при вводе чисел предусмотреть возможность обработки возникшего исключения (например, вместо целого числа ввели дробное, или вместо числа ввели букву)
var
number_1, number_2 :Integer;
result:real;
begin
Try
number_1:=StrToInt(Edit1.Text);
number_2:=StrToInt(Edit2.Text);
Try
result := number_1/ number_2;
ShowMessage(‘ result = ‘+FloatToStr(result));
Finally
ShowMessage(‘Второе число равно нулю. Деление на число ноль. Введите другое число и повторите попытку’);
end;
Finally
ShowMessage(‘Вы ввели не правильные исходные данные’);
end;
end;

 

Примечание: В программе использованы вложенные инструкции Try:

ПРИМЕР 3: Деление на ноль с предложением finally.
var
number, zero : Integer;
begin
// Попытка деленя целого числа на нуль — чтобы поднять исключение
number := -1;
Try
zero := 0;
number := 1 div zero;
ShowMessage(‘number / zero = ‘+IntToStr(number));
Finally
if number = -1 then
begin
ShowMessage(‘Числу не было присвоено значение — использование значения по умолчанию’);
number := 0;
end;
end;
end;

Примечание: Числу не было присвоено значение — использование значения по умолчанию. Затем, программа заканчивается с сообщением об ошибке EDivByZero -, предложение finally не выловило ошибку.

 

ПРИМЕР 4: Печать

Try

{операция печати}

finally

on E: Eprinter do

Showmessage(E.Message); //Вывести сообщение об ошибке

end;

ПРИМЕР 5:
Object1 := TObject1.Create;
try
Object2 := TObject2.Create;
try
Object1.DoWork;
Object2.DoWork;
finally
Object2.Free;
end;
finally
Object1.Free;
end;
ПРИМЕР 6:

 

try
try
EnumThreadWindows(CurrentThreadID, @Disable, 0);
Result := TaskWindowList;
except
EnableTaskWindows(TaskWindowList);
raise;
end;
finally
TaskWindowList := SaveWindowList;
TaskActiveWindow := SaveActiveWindow;
end;
Добавить комментарий