![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
try ... except в цикле [D7, 95/98, ME, NT4, 2000, XP, 2003]
qwersdgvnb © (2006-01-19 13:38:00)Здравствуйте люди добрые.
Объясните такой момент пожалуйста.
если в цикле у меня возникает исключительная операция (ну например /0), которая сидит в блоке try... except, приложение продолжает работать, но выполнение самого цикла прекращается. Как сделать, что бы при возникновении исключения цикл продолжал выполняться?
т.е. например
for i:=-5 to 5 do
try
a:=10/i;
except
showmessage('aшипка');
end;
надо чтобы на i=0 показалось сообщение об ошибке, а цикл продолжал выполняться с i=1;2;3...
Игорь Шевченко (2006-01-19 16:44:00) [1]Автору - читать
http://www.ln.ua/~openxs/articles/smart-questions-ru.html
думать над прочитанным
Ega23 (2006-01-19 16:44:00) [2]Удалено модератором
Leonid Troyanovsky (2006-01-19 16:38:00) [3]
> Leonid Troyanovsky © (19.01.06 16:36) [17]
> Т.е., прав уважаемый Digitman, я ошибался.
Да, и уважаемый Johnmen также был прав.
--
Regards, LVT.
AndreyAR (2006-01-19 16:37:00) [4]Удалено модератором
Leonid Troyanovsky (2006-01-19 16:36:00) [5]
> AndreyAR (19.01.06 16:20) [14]
> Если человек держит меня за полного лоха, тогда незачем
> вообще мне что-то отвечать.
Да я, в общем-то, изначально и не держал.
Но, связи между EZeroDivide vs EADOError(?) предположить,
конечно, не мог. Как, собс-но, и последующую эскалацию
немотивированной агрессивности.
Т.е., прав уважаемый Digitman, я ошибался.
--
Regards, LVT.
Digitman (2006-01-19 16:25:00) [6]
> AndreyAR (19.01.06 16:20) [14]
А вот в этом случае, думаю, ты заработал в форуме почетное звание - LMD.
Johnmen (2006-01-19 16:24:00) [7]>В помощи я не нуждаюсь.
О как!
>Если человек держит меня за полного лоха, тогда незачем вообще мне что-то отвечать.
Видимо, он и не держал, раз ответил. И это было его ошибкой...:)
AndreyAR (2006-01-19 16:20:00) [8]Удалено модератором
Digitman (2006-01-19 16:02:00) [9]Удалено модератором
AndreyAR (2006-01-19 15:41:00) [10]
> если ты raise не делаешь, то НЕ ДОЛЖНО вываливаться.
> М.б. ты конкретный exception указал?
Нет, у меня вообще просто
except
end;
Сейчас еще раз попробую проверить, может, сам торможу...
AndreyAR (2006-01-19 15:37:00) [11]
> Сначала надо проверять, вообще-то...
Разумеется, но происходит вставка в цикле примерно 1.000.000 записей, и выполняется весь код часа четыре. Если еще перед каждым инсертом проверку делать, то...
AndreyAR (2006-01-19 15:34:00) [12]Удалено модератором
Digitman (2006-01-19 15:28:00) [13]
> при этом вываливаеься-таки из цикла
.. и отладчик при этом тебе ни о чем не говорит.
Так ?
Ega23 (2006-01-19 15:27:00) [14]
> Исключение возникает при попытке вставить запись с уже существующим
> значением уникального индекса
Сначала надо проверять, вообще-то...
Ega23 (2006-01-19 15:26:00) [15]
> И вот при этом вываливаеься-таки из цикла.
если ты raise не делаешь, то НЕ ДОЛЖНО вываливаться.
М.б. ты конкретный exception указал?
AndreyAR (2006-01-19 15:23:00) [16]
> Цикл ДОЛЖЕН работать дальше! Если код именно такой.
Ну не совсем конечно, это же придельно упрощенный пример.
В цикле запрос insert к базе, в частности, к MS SQL.
Исключение возникает при попытке вставить запись с уже существующим значением уникального индекса (текст сообщения сервера точно не могу привести). И вот при этом вываливаеься-таки из цикла.
DimonS (2006-01-19 15:16:00) [17]Цикл ДОЛЖЕН работать дальше! Если код именно такой.
Digitman (2006-01-19 15:12:00) [18]
> Ну так что, уважаемые, никак нельзя или никто не знает?
Для начала, уважаемый, изволь в своей ветке фигурировать под одним и тем же "погонялом".
Для "конца", уважаемый, следует вникнуть в [3] и задуматься над
for i := ... to ... do
try
a:=10/i;
except
if i<>0 then
begin
showmessage('aшипка');
break;
end;
end;
Leonid Troyanovsky (2006-01-19 14:51:00) [19]
> qwersdgvnb (19.01.06 13:38)
> Объясните такой момент пожалуйста.
Видимо, переменная "a" нигде не используется.
--
Regards, LVT.
Ega23 (2006-01-19 13:55:00) [20]Вообще-то цикл должен дальше продолжить работу.