Страницы

Поиск по вопросам

среда, 12 декабря 2018 г.

Как работает try… except?

Как вообще работает этот блок? Нашел простой код его применения, привязал к кнопке, но он мне выдает ошибку, что-то там 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; ...
В обоих случаях будет выведено сообщение.

Комментариев нет:

Отправить комментарий