Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Общие вопросы > правильно использовать TRY


Автор: h2o 20.12.2005, 15:07
в каких случаях используется эта конструкция понятно!
Не понятно для каких действий её можно использовать....
например когда использую FindNext() она нужна?
или ещё такаой вариант:
Код

try
 try
  //делаем тут различные присвоения переменных
  //потом с реестром работаем
  Reg:=Tregistry.Cteate();
  //заполняем списки различные
 finally
  Reg.Closekey;
  Reg.Free
 end;
except
 showmessage('где-то неудача');
end;

вообще можно ли использовать такую конструкцию или это чем-то черевато, может последствия могут где-то выплыть???

Автор: _hunter 20.12.2005, 15:22
для каких действий? для осовобождения ресурсов в случае ошибки
т.к. нужно вызывать FindClose() -- нужна.
что значит можно ли? -- нужно...

а, вообще, это в любой книжке есть...

Автор: h2o 20.12.2005, 15:39
да просто try-finally заключен в try-except, я дусаю вдруг из-за этого ошибки или другие косяки могут быть... я просто кучу примеров смотрел и ни разу не видел чтобы такое использовалось!

Автор: Snowy 20.12.2005, 16:20
Просто Finally не дает вывести сообщение в случае ошибки.
Поэтому, если мы хотим finally, но при этом и ошибку фиксировать,
то дополнительно заключаем в try except.

Автор: StayAtHome 20.12.2005, 16:39
Кхм, насколько я понимаю try-except должен находиться _внутри_ try-finally, а не наоборот, как вбыло вышенаписано?

Автор: _hunter 20.12.2005, 16:43
а разницы?

Автор: h2o 20.12.2005, 17:11
да, есть ли разьница?
Добавлено @ 17:11
хотя вроде ошибку и так выводит....

Автор: StayAtHome 20.12.2005, 17:43
Насколько припоминаю, exception за пределы try-finally не выходит. Т. е. если try-finally внутри try-except, то блок except-end никогда выполняться не будет, т.к. все exception'ы будет перехватывать и "глушить" try-finally.

Автор: Snowy 20.12.2005, 17:54
Цитата(StayAtHome @ 20.12.2005, 16:39)
Кхм, насколько я понимаю try-except должен находиться _внутри_ try-finally, а не наоборот, как вбыло вышенаписано?

Нет, именно так.

Цитата(StayAtHome @ 20.12.2005, 17:43)
Насколько припоминаю, exception за пределы try-finally не выходит.

Вложения нормально отрабатывают. Обычная практика.

Автор: _hunter 20.12.2005, 17:59
ну и запустил бы ради интереса:
Код

    try
        try
            raise Exception.Create('');
        finally
            ShowMessage('1');
        end;
    except
        ShowMessage('2');
    end;

выведутся оба message' а

Автор: StayAtHome 20.12.2005, 18:02
Да нет делфи под руками, сорри за дезу

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)