Wiederholen Sie eine Schleife in Python
Die while
- oder for
-Schleifen eignen sich hervorragend zum Wiederholen von Codeblöcken, und wir verwenden sie oft, wenn wir eine Aktion bekannt oder unbekannt oft ausprobieren müssen. Es gibt jedoch Situationen, in denen wir möglicherweise eine einzelne Schleife wiederholen müssen, weil die Aktion, die sie versuchen sollte, nicht ausgeführt wurde oder einen Fehler zurückgegeben hat.
Situationen wie diese treten bei randomisierten oder insbesondere bei Netzwerk-/Anfrageaktionen auf. Typischerweise funktionieren die Aktionen, können aber oft fehlschlagen, und hier können Dekorateure für Wiederholen
nützlich sein.
In diesem Artikel wird erläutert, wie wir mit solchen Situationen umgehen und eine Schleife in Python wiederholen.
Verwenden Sie @retry
, um eine Schleifenaktion in Python zu wiederholen
Wir können den retry
-Decorator der tenacity
-Bibliothek verwenden, um eine Schleifenaktion zu wiederholen, und Sie können mehr darüber in der Anleitung zu Python-retry
-Decorators erfahren.
Um die tenacity
-Bibliothek zu installieren, können wir den pip
-Befehl verwenden:
pip install tenacity
Um ein Fallbeispiel zu zeigen, erstellen wir eine Funktion, die zufällig Zahlen basierend auf einem bestimmten Start- und Endparameter (der benutzerdefiniert ist) generiert. Diese generateRandomly
-Funktion gibt jedoch nur dann eine Zahl zurück, wenn sie kleiner oder gleich zwanzig (20) ist.
Wenn die Zahl über 20 liegt, wird ein ValueError
ausgelöst.
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))
Die Ausgabe des Codes:
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
Die Benutzereingaben sind 12 und 50, und die erste zufällige Zahl war über 20; daher hat es einen ValueError
ausgelöst. Mit dem von tenacity
bereitgestellten retry
-Decorator können wir jedoch dieselbe Schleife wiederholen, bis sie uns eine Zahl kleiner oder gleich 20 gibt.
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))
Die Ausgabe des Codes:
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
Wir haben print("Tried")
eingeführt, um Ihnen zu zeigen, wie oft die Funktion generateRandomly
wiederholt wurde, bevor sie eine Zahl kleiner oder gleich 20 ergab. Ohne Tried
sieht die Ausgabe eher so aus.
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