Форум: "Основная";
Текущий архив: 2004.05.30;
Скачать: [xml.tar.bz2];
ВнизОбработка исключений Найти похожие ветки
← →
Zigmond (2004-05-19 16:46) [0]Пишу программу и столкнулся с проблемой. Мне нужно, чтобы после возникновеня исключения программа продолжала работу следующим после try .. end оператором. Попробовал try finally end, но так программа выходит из процедуры сразу после end. Позволит ли try except end всегда продолжить после исключения продолжить работу в этой процедуре? Информация по поводу исключений просто встречается разнородная. Например встречались утверждения, что они отличаются только способом обработки исключения.
← →
pasha_golub © (2004-05-19 16:49) [1]Abort+F1
← →
Erik (2004-05-19 16:50) [2]Да. try except end полностью подовляет исключение, разумеется ненадо в except делать raise.
← →
Palladin © (2004-05-19 16:50) [3]ни одна из try не позволит тебе продолжить после исключения на следующей процедуре после точки возникновения исключения в блоке
:) надеюсь понятно выразился
← →
Digitman © (2004-05-19 16:58) [4]
> Например встречались утверждения, что они отличаются только
> способом обработки исключения.
правильные утверждения.
как ты хочешь, так и обрабатывай.
задача блока except..end - получение управления СРАЗУ ЖЕ как тольуо возникнет исключение при выполнении некоего оператора в коде, заключеннов в "скобки" try..except
иными словами
try
.. здесь одна или более строчек, при выполнении любой из которых может возникнуть потенциальное ИС
except
.. сюда немедленно будет передано управление, если ИС возникло
end
← →
Zigmond (2004-05-19 17:03) [5]Palladin
я имел ввиду продолжить после блока try .. end в процедуре в которой был блокю Усли неправильно выразился попробую сформулировать иниче. Мне надо после возникновения исключения1 чтобы программа продолжала работу с процедура1, а не шагнула на последнюю строку примера
procedure Proc
begin
...
try
исключение1ж
..
end;
процедура1;
процедура2;
..
end;
← →
Zigmond (2004-05-19 17:04) [6]мне не надо обрабатывать исключение, а надо продолжить работу
← →
WebErr © (2004-05-19 17:08) [7]
...
try
Some.Open;
except
ShowMessage("Печально, но давайте продолжим!!!");
end;
SomeOneElse;
...
← →
Palladin © (2004-05-19 17:10) [8]finally в обязательном порядке выполнит свое содержимое и выдаст исключение, except же исключение подавит но желательно бы содержать в нем обработку исключения
если ни в finally ни в except небыло инструкции exit, то
после обработки исключения и/или обязательны конечных действий работа продолжится с процедура1
← →
Digitman © (2004-05-19 17:13) [9]
> Zigmond (19.05.04 17:04) [6]
> мне не надо обрабатывать исключение, а надо продолжить работу
на здоровье !
просто ничего не пиши между except и end
управление будет передано первому же оператору, следующему за end
← →
Германн © (2004-05-19 17:34) [10]Но лучше все таки чего-нибудь делай между except и еnd. Хотя бы записывай в файл сообщение об ошибке. А то впоследствии возможна большая головная боль по причине вылета программы без всяких следов. Сам натыкался на такое.
← →
begin...end © (2004-05-19 17:54) [11]ИМХО, чел про другое спрашивает.
Тут уже был недавно подобный вопрос, и я сам тогда не понял, в чём тут дело.
1-й случай:begin
try
raise EAccessViolation.Create("Error");
except
end;
ShowMessage("Первый оператор после блока")
end;
2-й случай:begin
try
raise EAccessViolation.Create("Error");
finally
end;
ShowMessage("Первый оператор после блока")
end;
И вот в 1-м случае выполнение ShowMessage происходит, а во втором - нет.
Почему?
← →
Григорьев Антон (2004-05-19 18:04) [12]Потому что finally не убирает исключение, а только указывает на то, что код должен быть выполнен при любом способе выхода из блока, в т.ч. и при исключении. Т.к. исключение осталось неперехваченным, процедура завершается и стек раскручивается до первого подходящего обработчика исключения.
Страницы: 1 вся ветка
Форум: "Основная";
Текущий архив: 2004.05.30;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.044 c