У меня есть часть кода в Python, который, кажется, вызывает ошибку вероятностно, потому что это получает доступ к серверу и иногда что сервер имеет 500 внутренних ошибок сервера. Я хочу продолжать пробовать, пока я не получаю ошибку. Мое решение было:
while True:
try:
#code with possible error
except:
continue
else:
#the rest of the code
break
Это походит на взлом мне. Существует ли больше Pythonic способ сделать это?
При повторении из-за ошибки, Вы всегда должны:
, который простой универсальный способ решить эту проблему при покрытии тех проблем состоял бы в том, чтобы использовать возврат библиотека. Основной пример:
import backoff
@backoff.on_exception(
backoff.expo,
MyException,
max_tries=5
)
def make_request(self, data):
# do the request
Этот код переносит make_request с декоратором, который реализует логику повторной попытки. Мы повторяем каждый раз, когда наша определенная ошибка MyException
происходит с пределом 5 повторений. Экспоненциальная задержка является хорошей идеей в этом контексте, чтобы помочь минимизировать дополнительную нагрузку наше место повторений на удаленном сервере.
что относительно библиотека повторения по pypi? Я использовал его некоторое время, и это делает точно, что я хочу и больше (повторная попытка на ошибке, повторите, когда Ни один, повторите с тайм-аутом). Ниже пример с их веб-сайта:
import random
from retrying import retry
@retry
def do_something_unreliable():
if random.randint(0, 10) > 1:
raise IOError("Broken sauce, everything is hosed!!!111one")
else:
return "Awesome sauce!"
print do_something_unreliable()