Главная страница
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.054 c
14-1084382180
NailMan
2004-05-12 21:16
2004.05.30
Че-то запутался с приведением к типу... :-(


14-1084526464
Карелин Артем
2004-05-14 13:21
2004.05.30
Где взять бесплатный невидимый счетчик на страницу?


14-1084455951
RealRascal
2004-05-13 17:45
2004.05.30
Баг компилятора дельфи?


14-1083910095
syte_ser78
2004-05-07 10:08
2004.05.30
Разбивка значений ячейки Екселя


6-1082015337
Dmitrij_K
2004-04-15 11:48
2004.05.30
Опять про NETSEND