python: повторите X раз, если возникла исключительная ситуация, выйдите, если нет

Теперь он работает один раз, если подключен успешно, но если встречается исключение, он не повторяет попытки, как мне хотелось бы, просто выдает:

Will retry: [Errno 111] Connection refused

Он должен возвращать False, если все попытки не увенчались успехом, и True, если хотя бы одна из них вернула ответ

Кажется, есть что-то сложное с необходимостью 'while', например

for attempt in range(attempts) and while True

Вот мой код:

attempts = 10
for attempt in range(attempts):
   try:
       conn = httplib.HTTPConnection("server:80", timeout=5)
       conn.request("GET","/url")
       r = conn.getresponse()
   except socket.error, serr:
       print("Will retry: %s" % serr)
       conn.close()
   else:
       print("OK")
   finally:
       return False

Я пробовал также:

for attempt in range(attempts):
   while True:
       try:

Тот же результат...

1 ответ

Попробуйте использовать счетчик и флаг внутри цикла while.

def funct():
    flag = False
    counter = 0
    while True:
        counter += 1
        try:
           conn = httplib.HTTPConnection("server:80", timeout=5)
           conn.request("GET","/url")
           r = conn.getresponse()
           flag = True
           break
        except socket.error, serr:
           print("Will retry: %s" % serr)
           conn.close() 
        if counter>9:
           break
    return flag
Другие вопросы по тегам