Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

try ... except в цикле [D7, 95/98, ME, NT4, 2000, XP, 2003]


Страницы:   1 2

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]

Вообще-то цикл должен дальше продолжить работу.


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо