|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
|||
|
|||
Продолжить цикл после except
Можно ли после выполнения кода, заключенного в except ... end вернуться в тело цикла? С помощью goto не получилось
|
#2
|
|||
|
|||
Может так:
Код:
for i:=//-------- begin try /----- except //---- continue; end; end; |
#3
|
||||
|
||||
Код:
for i:=0 to 7 do try // to do except // oops end; |
#4
|
|||
|
|||
ни так ни так не работает
|
#5
|
|||
|
|||
Цитата:
|
#6
|
|||
|
|||
Код:
procedure thread1.execute; var i:integer; username,pass:string; begin form1.IdSMTP1.Host:='smtp.mail.ru'; for i:=0 to form1.Memo1.Lines.Count-1 do try username:=copy(form1.Memo1.Lines[i],1,pos(';',form1.Memo1.Lines[i])-1); pass:=copy(form1.Memo1.lines[i],pos(';',form1.Memo1.Lines[i])+1,length(form1.Memo1.Lines[i])-pos(';',form1.Memo1.Lines[i])+1); form1.IdSMTP1.Username:=username; form1.IdSMTP1.Password:=pass; form1.IdSMTP1.Connect(); if form1.IdSMTP1.Authenticate then begin form1.Memo2.Lines.Add(username+';'+pass); form1.IdSMTP1.Disconnect; end; except on E:EIdProtocolReplyError do begin form1.Memo3.Lines.Add(username+';'+pass); end; end; end; Проверяет до первого невалидного аккаунта, дальше встает |
#7
|
||||
|
||||
PHP код:
|
#8
|
|||
|
|||
Что это еще за oops?
|
#9
|
|||
|
|||
Как пример:
Все прекрасно отрабатывает. (тут заведомо ошибка деление на 0 ) Код:
procedure TForm1.Button1Click(Sender: TObject); var i,l:integer; k:real; begin for i:=0 to 100 do begin l:=0; try k:=i/l; except on e:exception do memo1.Lines.Add(inttostr(i)+' - '+e.Message); end; label1.Caption:=floattostr(k); end; end; |
#10
|
|||
|
|||
Это совсем не то
|
#11
|
|||
|
|||
почему же?
|
#12
|
|||
|
|||
потому что у тебя в каждой шаге ошибка, а у меня ее может и не быть. Если переделать мою программу по твоему примеру, то после первого нерабочего аккаунта все рабочие будут записываться как нерабочие
|
#13
|
|||
|
|||
Причем тут в каждом шаге или нет?
даже если не в каждом будет код будет работать. Вообщем варианта 2 еще. ХЗ поможет или нет но заключи тело цикла в begin end/ второй попробуй использовать E:Exception |
#14
|
|||
|
|||
собственно, проблема в том, что ты отлавливаешь только сообщения об ошибках протокола. при этом, если просто сервер не существует, то ты получаешь другой класс исключения, который не обрабатывается. Надо:
Код:
For I := 0 To AList.Count-1 Do Try CheckAccount(AList[i]); Memo1.Lines.Add(AList[i]); Except Memo2.Lines.Add(AList[i]); End; Код приблизительный. CheckAccount - процедура, которая пытается проверить учетную запись. AList - некоторый список с учетками. Memo1 - список "хороших" учеток, Memo2 - список "плохих" учеток. |
#15
|
|||
|
|||
Black Raider, ну вот попробуй сделай с моим кодом, чтобы работало.
lmikle, сделал как у тебя, создал процедуру. Появилась еще одна проблема - счетчик сбивается(i не увеличивается). Вот код, переменные все глобальные Код:
procedure tform1.check(akk:string); begin form1.IdSMTP1.Username:=username; form1.IdSMTP1.Password:=pass; form1.IdSMTP1.Connect(); form1.IdSMTP1.Authenticate; end; procedure thread1.execute; begin username:=copy(form1.Memo1.Lines[i],1,pos(';',form1.Memo1.Lines[i])-1); pass:=copy(form1.Memo1.Lines[i],pos(';',form1.Memo1.Lines[i])+1,length(form1.Memo1.Lines[i])-length(username)-1); form1.IdSMTP1.Host:='smtp.mail.ru'; for i:=0 to form1.Memo1.Lines.Count-1 do try form1.check(form1.Memo1.Lines[i]); form1.Memo2.Lines.Add(username+';'+pass); form1.IdSMTP1.Disconnect; except form1.Memo3.Lines.Add(username+';'+pass); end; end; |