Heim > Artikel > Backend-Entwicklung > Lösung zum erneuten Versuch, wenn eine Ausnahme auftritt
Dieser Artikel stellt Ihnen hauptsächlich die Lösung für abnormale Wiederholungen in Python vor. Ich glaube, dass sie für jeden, der Python benötigt, einen gewissen Referenzwert hat . Werfen wir einen Blick darauf.
Vorwort
Bei der Datenerfassung kommt es häufig vor, dass Programme aufgrund von Netzwerkproblemen gespeichert werden und den Fehlerinhalt nachbearbeiten.
Ursprünglicher Prozess:
def crawl_page(url): pass def log_error(url): pass url = "" try: crawl_page(url) except: log_error(url)
Verbesserter Prozess:
attempts = 0 success = False while attempts < 3 and not success: try: crawl_page(url) success = True except: attempts += 1 if attempts == 3: break
Kürzlich entdeckte neue Lösung: erneut versuchen
Wiederholen ist ein Python. Das Wiederholungspaket kann verwendet werden um einige Programmabschnitte, die möglicherweise fehlschlagen, automatisch erneut zu versuchen. retrying
Stellen Sie eine Dekoratorfunktion bereit Die dekorierte Funktion wird erneut ausgeführt, wenn sie fehlschlägt. Standardmäßig wird es so lange wiederholt, wie ein Fehler gemeldet wird. retry
import random from retrying import retry @retry def do_something_unreliable(): if random.randint(0, 10) > 1: raise IOError("Broken sauce, everything is hosed!!!111one") else: return "Awesome sauce!" print do_something_unreliable()Wenn wir die Funktion
ausführen, wird sie erst beendet, wenn have_a_try
5 zurückgibt, andernfalls wird sie erneut ausgeführt. random.randint
retry kann auch einige Parameter akzeptieren. In der Initialisierungsfunktion der Retrying-Klasse im Quellcode können Sie die optionalen Parameter sehen:
s<a href="http://www.php.cn/wiki/904.html" target="_blank">top<p>_max_attempt_number</p></a>
: gewohnt Legen Sie das Maximum fest. Die Anzahl der Versuche wird nicht mehr wiederholt, wenn sie diese Zahl überschreitet s<a href="http://www.php.cn/wiki/904.html" target="_blank">top</a>_max_attempt_number
: Wenn sie beispielsweise auf 10000 eingestellt ist, beginnt sie ab dem Zeitpunkt, an dem die Dekoration erfolgt Die Ausführung der Funktion beginnt und endet, wenn die Funktion erfolgreich ausgeführt wird. Solange dieser Zeitraum 10 Sekunden überschreitet, wird die Funktion nicht mehr ausgeführt stop_max_delay
wait_fixed
retrying
wait_random_min和wait_random_max
retrying
stattgefunden hat Wenn der generierte Wert die Größe von wait_exponential_multiplier和wait_exponential_max
überschreitet, sind die nächsten beiden Die Verweilwerte zwischen Wiederholungsversuchen sind alle retrying
. Dieses Design berücksichtigt den 2^previous_attempt_number * wait_exponential_multiplier
-Algorithmus und kann Blockierungssituationen entschärfen. previous_attempt_number
retry
wait_exponential_max
wait_exponential_max
Wir können angeben, welche Ausnahmen wir erneut versuchen möchten, wenn eine Ausnahme auftritt. Verwenden Sie dazu retry_on_<a href="http://www.php.cn/.%20wiki/%20265.html" target="_blank">Ausnahme<code>exponential backoff
Übergeben Sie eine Funktion
retry_on_<a href="http://www.php.cn/wiki/265.html" target="_blank">exception</a>
eine Ausnahme gemeldet wird, wird die Ausnahme als formaler Parameter
an die Funktion
def retry_if_io_error(exception): return isinstance(exception, IOError) @retry(retry_on_exception=retry_if_io_error) def read_a_file(): with open("file", "r") as f: return f.read(), wenn nicht, stoppen Sie die Ausführung und
lösen Sie eine Ausnahme aus read_a_file
. exception
retry_if_io_error
exception
Wir können auch angeben, zu welchen Ergebnissen IOError
wir gehen sollen, wenn wir sie erhalten. Dazu ist die Verwendung von retry
erforderlich, um ein Funktionsobjekt zu übergeben:
retry
Nach erfolgreicher Ausführung von retry_on_result
wird der Rückgabewert
in Form des formalen Parameters
an die Funktion
def retry_if_result_none(result): return result is None @retry(retry_on_result=retry_if_result_none) def get_result(): return Nonedann Go
, andernfalls beenden und den Funktionswert zurückgeben. get_result
result
Zusammenfassungretry_if_result_none
None
retry
[Verwandte Empfehlungen]1 🎜>Besonders empfohlen
: Download der Version „php Programmer Toolbox“ V0.1
2 Kostenloses Python-Video-Tutorial
3Grundlegendes Python-Einführungs-Tutorial
Das obige ist der detaillierte Inhalt vonLösung zum erneuten Versuch, wenn eine Ausnahme auftritt. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!