Форум: "Основная";
Текущий архив: 2003.09.18;
Скачать: [xml.tar.bz2];
Вниз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;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.01 c