Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.05.30;
Скачать: CL | DM;

Вниз

try   Найти похожие ветки 

 
Empleado ©   (2004-05-18 17:23) [0]

Всем привет!

Кто-нибудь объясните мне разницу в результате выполнения данных двух процедур. А именно, почему так происходит?

Вариант 1) С использованием raise
Вариант 2) С использованием div 0


procedure TForm1.Button1Click(Sender: TObject);
var i: integer;
begin
 i := 0;
 try
    //i := 1 div i
    raise Exception.Create("My exception")
 except
    showmessage("in block TRY..EXCEPT")
 end;
 showmessage("Showmessage - after TRY..EXCEPT")
end;

procedure TForm1.Button2Click(Sender: TObject);
var i: integer;
begin
 i := 0;
 try
    //i := 1 div i
    raise Exception.Create("My exception")
 finally
    showmessage("in block TRY..FINALLY")
 end;
 showmessage("Showmessage - after TRY..FINALLY")
end;


Gracias


 
Digitman ©   (2004-05-18 17:31) [1]


> почему так происходит?


а что. собссно, происходит-то ? ... что-то жуткое ?


 
Palladin ©   (2004-05-18 17:32) [2]

ну и типа справка по finally и except тебе ни о чем не сказала?


 
zhe   (2004-05-18 17:32) [3]

ни в одном из случаев последний showmessage не должен появляться, чё ту не понятно.

зы: сделайте что-то с вашым тупорылым серваком! ERROR 500!


 
zhe   (2004-05-18 17:36) [4]

то, что после finally выполнится полюбому, а то что после except, только тогда, когда после верхнего try скурвится какой-нибудь ексепшын. вот и вся ...


 
begin...end ©   (2004-05-18 17:43) [5]

Последний ShowMessage выполнится в любом из этих двух случаев, поскольку он вообще расположен за пределами блоков try...except...end и try...finally...end.


 
zhe   (2004-05-18 17:52) [6]

не гони, во втором он хрен выполнится, только в первом случае, я хреново посмортел. потому, как во втором ексэпшын сразу выбивает процедуру(функцию) на фик


 
Empleado ©   (2004-05-18 18:13) [7]

>Palladin ©   (18.05.04 17:32) [2]
Сказала, сказала... Уже битых полчаса всматриваюсь в хелп, как идиот, чес.слово; и ни фига!
Собственно вопрос от загнанности и настрадалости.
Ты даже не представляешь, сколько раз я читал эту фразу (finally): If an exception is raised during execution of statementList1, control is transferred to statementList2; once statementList2 finishes executing, the exception is re-raised...

Теперь предлагаю такой вариант:


procedure TForm1.Button1Click(Sender: TObject);
var i: integer;
begin
 i := 0;
 try
    i := 1 div i
    //raise Exception.Create("My exception")
 except
    showmessage("in block TRY..EXCEPT")
 end;
 showmessage("Showmessage - after TRY..EXCEPT");
 showmessage("i = " + inttostr(i))
end;

procedure TForm1.Button2Click(Sender: TObject);
var i: integer;
begin
 i := 0;
 try
    i := 1 div i
    //raise Exception.Create("My exception")
 finally
    showmessage("in block TRY..FINALLY")
 end;
 showmessage("Showmessage - after TRY..FINALLY");
 showmessage("i = " + inttostr(i))
end;


Вроде все встало на свои места.
Это оптимизатор компилятора заклинил переменную i ? Т.е. он не хотел ни в какую делать ексепшин, если i не использовалась?

Gracias


 
begin...end ©   (2004-05-18 19:06) [8]

Удалено модератором



Страницы: 1 вся ветка

Текущий архив: 2004.05.30;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.06 c
7-1083125533
you
2004-04-28 08:12
2004.05.30
Как проверить наличие дискеты в дисководе


3-1083421990
Sour
2004-05-01 18:33
2004.05.30
xpath


11-1073682537
mdw
2004-01-10 00:08
2004.05.30
Еще сайт посвященный KOL.


1-1084283285
Delphi5.01
2004-05-11 17:48
2004.05.30
Thread1Execute (При этом не происходит RePaint формы)


3-1084034065
AVKAR
2004-05-08 20:34
2004.05.30
Lookup-поле