Повторите цикл for в Python - PullRequest
0 голосов
/ 01 сентября 2018

Вот мой код для примера:

from time import sleep
for i in range(0,20):
    print(i)
    if i == 5:
        sleep(2)
        print('SomeThing Failed ....')

Вывод:

1
2
3
4
5
SomeThing Failed ....
6
7
8
9

Но я хочу, чтобы при появлении Failed, попробуйте еще раз и продолжайте, как это:

1
2
3
4
5
SomeThing Failed ....
5
6
7
8
9

Ответы [ 4 ]

0 голосов
/ 01 сентября 2018

Повторяется только один раз для каждой итерации

from time import sleep
i = 0
retry = True
while(i<20):
    print(i)
    if i == 5 and retry:
        retry = False
        sleep(2)
        print('SomeThing Failed ....')
    else:
        i+=1
        retry = True

Вывод: 0 1 2 3 4 5 SomeThing Failed .... 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19

0 голосов
/ 01 сентября 2018

Вы можете сделать это с помощью цикла while внутри цикла for и выходить из него только в том случае, если попытка была выполнена успешно:

for i in range(20):
    while True:
        result = do_stuff()  # function should return a success state! 
        if result:
             break  # do_stuff() said all is good, leave loop

Немного зависит от задачи, например, Вы могли бы хотеть try-except вместо:

for i in range(20):
    while True:
        try:
            do_stuff()  # raises exception
        except StuffError:
            continue
        break  # no exception was raised, leave loop

Если вы хотите наложить ограничение на количество попыток, вы можете вложить другой цикл for следующим образом:

for i in range(20):
    for j in range(3):  # only retry a maximum of 3 times
        try:
            do_stuff()
        except StuffError:
            continue
        break
0 голосов
/ 01 сентября 2018
from time import sleep

# Usually you check `i` only once
# which means `countdown` defaults to 1
def check(i, countdown = 1):

    print(i)

    # If `i` is 5 (or any other arbitrary problematic strange number)
    if i == 5:
        sleep(2)

        # Decide if the program should try it again
        # if `countdown` is 0,
        # we stop retrying and continue
        if countdown > 0:
            print('Something Failed ...')

            return check(i, countdown - 1)

# main
for i in range(0, 20):
    check(i)
0 голосов
/ 01 сентября 2018

Просто поместите часть working в функцию, и она повторит один раз, проверив возвращаемое значение

from time import sleep

def working(i):
    print(i)
    if i == 5:
        return False
    return True

for i in range(0,10):
    ret = working(i)
    if ret is not True:
        sleep(2)
        print('SomeThing Failed ....')
        working(i)

выход

0
1
2
3
4
5
SomeThing Failed ....
5
6
7
8
9
...