Как вообще работает этот блок? Нашел простой код его применения, привязал к кнопке, но он мне выдает ошибку, что-то там by zero (я так понял типа на ноль нельзя делить) и приходиться сбрасывать работу программы...
var
number, zero: Integer;
begin
// Попытка делить целое число на ноль - чтобы поднять исключение
try
zero := 0;
number := 1 div zero;
ShowMessage('number / zero = '+IntToStr(number));
except
ShowMessage('Неизвестная ошибка');
end;
end;
Ответ
Это очень полезный инструмент ,и, кроме того, очень распространенный. Не знаю, как вы искали в гугле, если ничего не нашли на эту тему...
Конструкция
Try -> EXCEPT -> END
управляет поведением возможной исключительной ситуацией, которая может возникнуть в секции "TRY". Если такая возникает, то выполнение кода в секции "TRY" прекращается и моментально перепрыгивает в начало секции "EXCEPT" и код, находящийся там, выполняется до конца, т.е до "END". Рассмотрим пример обработки исключительной ситуацией "EZeroDevide"(деление на ноль) :
...
var
a: integer;
...
begin
try
a := 1/0;
except
on EZeroDivide do showmessage('Divide by zero not allowed!'); // обработка КОНКРЕТНОЙ исключителной ситуации
end;
end;
Также существует еще одна конструкция обработки исключительных ситуаций:
TRY -> FINALLY -> END
Данный блок функционирует немного иначе: если в секции "TRY" возникнет исключительная ситуация, то выполнение кода оставновится в этой секции и перепрыгнет в секцию "FINALLY".
Но даже если никакой исключительной ситуации не возникнет, то в конце выполнения кода в "TRY", секция "FINALLY" все равно будет выполнена. Эту конструкцию уместно применять, если в конце работы надо произвести операции по, например, освобождению памяти. Пример:
1 случай:
...
try
a := 1/0;
finally
showmessage('Divide by zero not allowed!');
end;
...
2 случай:
...
try
a := 1/1;
finally
showmessage('Divide by zero not allowed!');
end;
...
В обоих случаях будет выведено сообщение.
Комментариев нет:
Отправить комментарий