Python에서 루프 재시도
while
또는 for
루프는 코드 블록을 반복하는 데 적합하며 알려진 또는 알려지지 않은 횟수 동안 작업을 시도해야 할 때 자주 사용합니다. 그러나 시도해야 하는 작업이 발생하지 않았거나 오류를 반환했기 때문에 단일 루프를 다시 시도해야 하는 상황이 있습니다.
이와 같은 상황은 무작위 또는 특히 네트워크/요청 작업에서 발생합니다. 일반적으로 작업은 작동하지만 종종 실패할 수 있으며 여기서 재시도
데코레이터가 유용할 수 있습니다.
이 기사에서는 이러한 상황을 처리하고 Python에서 루프를 재시도하는 방법에 대해 설명합니다.
@retry
를 사용하여 Python에서 루프 작업 재시도
루프 작업을 재시도하기 위해 tenacity
라이브러리 retry
데코레이터를 사용할 수 있으며 Python retry
데코레이터 가이드에서 이에 대해 자세히 알아볼 수 있습니다.
tenacity
라이브러리를 설치하려면 pip
명령을 사용할 수 있습니다.
pip install tenacity
사례 시나리오를 보여주기 위해 주어진 시작 및 종료 매개변수(사용자 정의됨)를 기반으로 임의로 숫자를 생성하는 함수를 만들 것입니다. 그러나 이 generateRandomly
함수는 이십(20) 이하인 경우에만 숫자를 반환합니다.
숫자가 20보다 크면 ValueError
가 발생합니다.
import random
userStartInput = int(input("Enter Start Number: "))
userEndInput = int(input("Enter End Number: "))
def generateRandomly(start, end):
generateNum = random.randint(start, end)
if generateNum > 20:
print("Tried")
raise ValueError("Number generated isn't within range")
else:
return generateNum
for i in range(0, 20):
print(generateRandomly(userStartInput, userEndInput))
코드 출력:
Enter Start Number: 12
Enter End Number: 50
Tried
Traceback (most recent call last):
File "C:\Users\akinl\Documents\Python\SFTP\test.py", line 17, in <module>
print(generateRandomly(userStartInput, userEndInput))
File "C:\Users\akinl\Documents\Python\SFTP\test.py", line 11, in generateRandomly
raise ValueError("Number generated isn't within range")
ValueError: Number generated isn't within range
사용자 입력은 12와 50이고 첫 번째 무작위 숫자는 20 이상이었습니다. 따라서 ValueError
가 발생했습니다. 그러나 tenacity
에서 제공하는 retry
데코레이터를 사용하면 20보다 작거나 같은 숫자가 나올 때까지 동일한 루프를 다시 시도할 수 있습니다.
import random
from tenacity import retry
userStartInput = int(input("Enter Start Number: "))
userEndInput = int(input("Enter End Number: "))
@retry
def generateRandomly(start, end):
generateNum = random.randint(start, end)
if generateNum > 20:
print("Tried")
raise ValueError("Number generated isn't within range")
else:
return generateNum
for i in range(0, 20):
print(generateRandomly(userStartInput, userEndInput))
코드 출력:
Tried
Tried
Tried
13
Tried
15
Tried
Tried
Tried
Tried
Tried
Tried
Tried
Tried
15
Tried
Tried
Tried
Tried
Tried
16
20
18
Tried
16
Tried
Tried
Tried
18
19
Tried
Tried
Tried
14
Tried
20
Tried
Tried
Tried
19
Tried
Tried
Tried
15
13
14
Tried
12
Tried
Tried
Tried
Tried
Tried
Tried
20
Tried
15
19
Tried
20
print("Tried")
를 도입하여 generateRandomly
함수가 20보다 작거나 같은 숫자를 제공하기 전에 몇 번이나 재시도했는지 보여줍니다. Tried
가 없으면 출력은 다음과 같이 보입니다.
Olorunfemi is a lover of technology and computers. In addition, I write technology and coding content for developers and hobbyists. When not working, I learn to design, among other things.
LinkedIn