Уведомления

Группа в Telegram: @pythonsu

#1 Дек. 27, 2013 22:31:33

Razor
Зарегистрирован: 2012-09-11
Сообщения: 127
Репутация: +  2  -
Профиль   Отправить e-mail  

Возвращение значения в цикл

Представим простую ситуацию:

try:
    for value in list:
        # куча всякого
        # иногда выскакивают ошибки (разные)
except: # обрабатываем ошибки
    # ????? 

Как снова вернуть значение в цикл, чтобы цикл повторно проверил значение. Да, я знаю, что оборачивать подобным образом нельзя, но суть не в этом.

Суть: как вернуть значение в цикл?

Отредактировано Razor (Дек. 27, 2013 22:36:18)

Офлайн

#2 Дек. 27, 2013 23:28:18

@cckyi_boxxx
От:
Зарегистрирован: 2012-01-13
Сообщения: 181
Репутация: +  14  -
Профиль   Отправить e-mail  

Возвращение значения в цикл

во-первых какое значение ?

если интересует что-бы цикл начал работать с нужного места а не с начала то следует при помощи pop() снимать уже обработанные значения из списка , а затем в случае ошибки перезапускать цикл

сделать это можно обернув вашу конструкцию в цикл while который будет следить за тем что в списке еще есть необработанные элементы



Офлайн

#3 Дек. 28, 2013 07:19:00

Razor
Зарегистрирован: 2012-09-11
Сообщения: 127
Репутация: +  2  -
Профиль   Отправить e-mail  

Возвращение значения в цикл

Блин, и правда, выскочило из головы про использование списка, как стека.

Да не, while тут не нужен:

list_values = list(range(100))
try:
    for value[0] in list_values:
        # куча всякого
        # иногда выскакивают ошибки (разные)
        del [0]
except: # обрабатываем ошибки
    continue

Спасибо за помощь, что-то я сглупил немного.

Офлайн

#4 Дек. 28, 2013 10:13:39

Razor
Зарегистрирован: 2012-09-11
Сообщения: 127
Репутация: +  2  -
Профиль   Отправить e-mail  

Возвращение значения в цикл

Боже, что я написал. Нужно чаще спать, извините. Вы правы, тут нужен цикл while. Спасибо)

list_values = list(range(100))
try:
    while bool(list_values):
        # используем list_values[0]
        # куча всякого
        # иногда выскакивают ошибки (разные)
        del list_values[0]
except: # обрабатываем ошибки
    continue

Отредактировано Razor (Дек. 28, 2013 10:17:06)

Офлайн

#5 Дек. 28, 2013 12:49:36

FishHook
От:
Зарегистрирован: 2011-01-08
Сообщения: 8312
Репутация: +  568  -
Профиль   Отправить e-mail  

Возвращение значения в цикл

import random
l = [1, 2, 3, 4, 5, 6, 7, 8, 9]
lst = iter(l)
val = lst.next()
while 1:
    try:
        print val
        assert random.randint(0, 1)
    except Exception:
        continue
    try:
        val = lst.next()
    except StopIteration:
        break



Офлайн

#6 Дек. 28, 2013 23:01:34

o7412369815963
От:
Зарегистрирован: 2009-06-17
Сообщения: 1986
Репутация: +  32  -
Профиль   Отправить e-mail  

Возвращение значения в цикл

for t in tasks:
  try:
    while True:
      # do work
      break  # next task
  except:
    continue

Или вот, (tasks - “Queue” или т.п.)
task = tasks.pop()
while task:
  try:
      # do work
      task = tasks.pop()
  except:
    # ...

Отредактировано o7412369815963 (Дек. 28, 2013 23:08:25)

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version