Wiederholen Sie eine Schleife in Python

Olorunfemi Akinlua 21 Juni 2023
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 Akinlua avatar Olorunfemi Akinlua avatar

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

Verwandter Artikel - Python Loop