파이썬에서 작업을 시도하고 있는데 실패한 경우 특정 방식으로 최대 10 번 시도하고 싶습니다. 다른 방법으로 이 실패하면 즉시 실패하고 싶습니다. 10 번의 재시도 후에 모든 실패가 발신자에게 전파되기를 바랍니다.조건부로 작업을 다시 시도하기위한 파이썬 흐름 제어
나는 흐름 제어를 만족스러운 방법으로 코딩 할 수 없었다. 여기에 행동의 한 예입니다 내가 원하는 (하지만 스타일!) :
def run():
max_retries = 10
for retry_index in range(max_retries):
try:
result = run_operation()
except OneTypeOfError:
if retry_index < max_retries - 1:
continue
else:
raise
if result.another_type_of_error:
if retry_index < max_retries - 1:
continue
else:
raise AnotherTypeOfError()
try:
result.do_a_followup_operation()
except AThirdTypeOfError:
if retry_index < max_retries - 1:
continue
else:
raise
return result
raise Exception("We don't expect to end up here")
가 처음에 난 그냥이 그렇게 재시도 논리 오류 처리 논리에서 분리 된 리팩토링 수 있다고 생각. 문제는, 예를 들어, OneTypeOfError가 result.do_a_followup_operation()에 의해 발생된다면, 나는 그 경우에 전혀 재 시도하지 않기를 바란다. 위의 특정 상황에서만 다시 시도하고 싶습니다.
그래서이 결과를 반환하는 함수, 제기 된 Exception (있는 경우) 및 다시 시도 가능한 예외인지 여부를 나타내는 플래그로 리펙토링 할 수 있다고 생각했습니다. 여하튼 그것은 나에게 상기보다 덜 우아하다고 느꼈다.
여기에 도움이 될만한 파이썬에서 흐름 제어 패턴이 있는지 궁금합니다.
당신은 [블록을 제외한 여러가] 수 (https://stackoverflow.com/questions/6095717/python-one-try-multiple-except)이 실제로 훨씬 더 우아하고 나에게 기분이 – JETM