#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; ... В обоих случаях будет выведено сообщение.
Комментариев нет:
Отправить комментарий