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

Вниз

try finally end не срабатывает   Найти похожие ветки 

 
tariel   (2003-09-04 15:18) [0]

Когда запускаю компиленную прогу постоянно выходит сообщение об ошибке, хотя там стоит try finally end

код примерно такой

try

...
if что-то неправильно then raise Exception.Create("My text");
...

finally
что-то.Free;
end;

при выполнении выкидывает сообщение об ошибке и "My text". Может это где то в параметрах проекта что-то не то указано, хотя все по умолчанию стоит. Раньше работало нормально, без сообщений, но мне надо было поменять кое-что и вот такая фигня после этого пошла. Может сталкивался кто, если поможете скажу вам большое спасибо


 
Reindeer Moss Eater ©   (2003-09-04 15:19) [1]

Так и должно быть


 
Palladin ©   (2003-09-04 15:20) [2]

Или запускай скомпилированный файл отдельно от среды или убери галочку Stop on delphi exceptions


 
Reindeer Moss Eater ©   (2003-09-04 15:20) [3]

Когда запускаю компиленную прогу постоянно выходит сообщение об ошибке, хотя там стоит try finally end

try finally end - это не подавитель сообщений об ошибках. Это еда из другой сказки.


 
ZEE ©   (2003-09-04 15:21) [4]

try
...
что-то неправильно
...
finally
что-то.Free;
end;

делай так, зачем тебе о неправильностях твоей проги всем рассказывать? :)


 
Reindeer Moss Eater ©   (2003-09-04 15:24) [5]

Или запускай скомпилированный файл отдельно от среды или убери галочку Stop on delphi exceptions

А чем это поможет?


 
malkolinge ©   (2003-09-04 15:32) [6]

Как было сказано выше - тре финалли - не подавляет ексепшн, более того даже и не дает возможности его обработать. Это просто способ защиты кода. код между finalle end обрабатываеться всегда, в независимости от того, была исключительная ситуация или нет. побробуй
Try
Except
end


 
y-soft ©   (2003-09-04 15:42) [7]

Еще лучше:

try
except
On E: Exception do
end;


 
tariel   (2003-09-05 06:33) [8]

Спасибо :) я поменял на except, ошибки перестали выскакивать. Не знал что finally способно на такое


 
KSergey ©   (2003-09-05 07:20) [9]

Оно не просто способно на такое, оно для этого и предназначено.
Только вот вопрос:
а) если не нужно сообщение об ошибке - зачем ты сам же его и геренируешь?? (if что-то неправильно then raise Exception.Create("My text"))

б) более того, зачем ты его генерируешь, а потом в Except давишь??!! Это уже совсем странно. Может его тогда не генерировать?

в) не забывай, что блок except выполняется только в случае возниктовения исключения, а значит так писать нельзя:

что-то.Create(..);
try
...
except
что-то.Free;
end;

В этом случае объект уничтожится только в случае возниктовения исключения, если все нормально - до Free дело не дойдет.


 
y-soft ©   (2003-09-05 07:24) [10]

>tariel (05.09.03 06:33) [8]

Все же простое подавление исключения не есть хорошо, обязательно надо обрабатывать (освобождать ресурсы и.т.д.), а в тяжелых случаях выводить сообщение/производить запись в системный журнал и завершать программу...

Так что еще лучше:

try
try
except
On E:Exception do
begin
...
//Если исключение невозможно корректно обработать, то
//передать его дальше по цепочке...
raise;
...
end;
end;
finally
...
end;



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

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

Наверх




Память: 0.49 MB
Время: 0.015 c
1-58713
Артем К
2003-09-08 08:44
2003.09.18
Создание св-ва Form: TForm у невизуального компонента?


6-58811
uaquantum
2003-07-17 02:29
2003.09.18
Ping


1-58716
madm
2003-09-08 14:29
2003.09.18
А где нарыть исходники RichEdit?


14-58883
Support1
2003-08-31 16:14
2003.09.18
Побуквенный вывод строки


3-58554
grusty
2003-08-27 12:10
2003.09.18
Вопрос по ADOQuery...