Aller au contenu principal
🔒 Mode aperçu. Les quinze premières leçons Foundations sont gratuites ; celle-ci est Pro. Démarrez un trial de 7 jours pour débloquer l'éditeur, les conseils AI et le reste du programme. Carte requise, annulez à tout moment dans Dashboard.Démarrer le trial de 7 jours →
← CoursSenior Deep-DivesModule 2 · Composants internes et performances de CPythoncontextelib.contextmanagerpredict21 / 161
+75 XP
Tâche
📝 **Question :** Prédisez le résultat exact. \`track\` est un générateur \`@contextmanager\` qui imprime \`enter:\` / \`exit:\` et a un bras \`sauf ValueError\`. Le premier bloc \`with\` est une exécution propre. La seconde soulève \`ValueError("oops")\` à l'intérieur du corps — le programme plante-t-il avant \`print("done")\`, ou le \`with\` l'avale-t-il ? 📋 Choisissez la bonne réponse. 💡 **Indice :** Relisez la théorie ci-dessus en cas de doute.
Prédis la sortie

Lis le code attentivement

from contextlib import contextmanager


@contextmanager
def track(label):
    print(f"enter:{label}")
    try:
        yield label.upper()
    except ValueError as e:
        print(f"caught:{e}")
    finally:
        print(f"exit:{label}")


with track("a") as t:
    print(f"body:{t}")

with track("b") as t:
    print(f"body:{t}")
    raise ValueError("oops")

print("done")

Que va afficher le programme ? Écris ici :

💬 Discussion

Soyez le premier à poser une question ou partager une astuce.
Connectez-vous pour rejoindre la discussion. La lecture est gratuite.
Chargement de la discussion…