Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 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
1-1084781602
Vadim X
2004-05-17 12:13
2004.05.30
Как сбросить кэш?


3-1084256289
goozman
2004-05-11 10:18
2004.05.30
Function UPPER


14-1084446906
Layner
2004-05-13 15:15
2004.05.30
мастера! Есть ли кто спец. по сварочным аппаратам?


3-1083336426
TankMan
2004-04-30 18:47
2004.05.30
Посоветуйте компонент...


14-1083933763
Nick-From
2004-05-07 16:42
2004.05.30
Застрял на запросе





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский