Python でループを再試行する
while
または for
ループは、コード ブロックを繰り返すのに最適で、既知または未知の回数のアクションを試行する必要がある場合によく使用します。 ただし、実行するはずのアクションが実行されなかったり、エラーが返されたりしたために、特異なループを再試行する必要がある場合があります。
このような状況は、ランダム化された、または特にネットワーク/リクエスト アクションで発生します。 通常、アクションは機能しますが、しばしば失敗する可能性があり、そこで retry
デコレーターが役立ちます。
この記事では、そのような状況をどのように処理し、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