python
import time
import httpx
def hole_mit_wiederholung(url, versuche=3):
for versuch in range(1, versuche + 1):
try:
r = httpx.get(url, timeout=10)
if r.status_code == 429 or r.status_code >= 500:
raise httpx.HTTPStatusError('Server meldet Problem', request=r.request, response=r)
r.raise_for_status()
return r.json()
except (httpx.TransportError, httpx.HTTPStatusError):
if versuch == versuche:
raise # letzter Versuch: Fehler weitergeben
time.sleep(2 ** versuch) # 2, 4, ... Sekunden warten
Bei 4xx-Fehlern (außer 429) lohnt sich eine Wiederholung nicht, denn dann ist die Anfrage selbst falsch.