Exercices Fonctions & Modules Decorateur de retry
🎉

Bravo!

Avancé 🧠 Fondamentaux 30 XP 0 personnes ont réussi

Decorateur de retry

Dans la vraie vie, tu utilises souvent des decorateurs pour gerer les erreurs. Un pattern tres courant : le retry (reessayer). Si une fonction echoue, on la reessaye un certain nombre de fois avant d'abandonner.

C'est typique pour les appels reseau ou les connexions a une base de données qui peuvent echouer temporairement.

Écris un decorateur parametrise retry(max_tentatives=3) qui reessaye une fonction jusqu'a max_tentatives fois si elle leve une exception. Si la fonction reussit, le decorateur renvoie le résultat. Si elle echoue apres toutes les tentatives, il releve la dernière exception.

Exemple :
compteur = [0]

@retry(max_tentatives=3)
def fragile():
compteur[0] += 1
if compteur[0] < 3:
raise ValueError('pas encore')
return 'ok'

fragile() renvoie 'ok' (apres 2 echecs et 1 succes)

Tests (3/4)

Reussite immediate
@retry(max_tentatives=3)
def ok():
    return 42
assert ok() == 42
Reussite apres echec
c = [0]
@retry(max_tentatives=3)
def fragile():
    c[0] += 1
    if c[0] < 2:
        raise ValueError('echec')
    return 'ok'
assert fragile() == 'ok'
Echec total
@retry(max_tentatives=2)
def impossible():
    raise ValueError('non')
try:
    impossible()
    assert False
except ValueError:
    assert True

+ 0 tests cachés

Indices (3 disponibles)

solution.py