Страницы

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

среда, 18 декабря 2019 г.

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

#delphi #исключения #delphi_7


Как вообще работает этот блок? Нашел простой код его применения, привязал к кнопке,
но он мне выдает ошибку, что-то там by zero (я так понял типа на ноль нельзя делить)
и приходиться сбрасывать работу программы...

var
    number, zero: Integer;
begin
    // Попытка делить целое число на ноль - чтобы поднять исключение
    try
        zero := 0;
        number := 1 div zero;
        ShowMessage('number / zero = '+IntToStr(number));
    except
        ShowMessage('Неизвестная ошибка');
    end;
end;

    


Ответы

Ответ 1



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

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

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