Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2004.05.30;
Скачать: [xml.tar.bz2];

Вниз

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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.47 MB
Время: 0.044 c
14-1083869414
lak
2004-05-06 22:50
2004.05.30
вопрос html


1-1084698515
Евгений2
2004-05-16 13:08
2004.05.30
малелький вопрос по DLL


4-1082564288
bOSE
2004-04-21 20:18
2004.05.30
завершение сеанса в w2k/xp


3-1084332193
чайник1
2004-05-12 07:23
2004.05.30
Как записать картинки типа jpg и gif в базу


1-1084654146
saNat
2004-05-16 00:49
2004.05.30
CGI приложение.





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский