Ugrás a fő tartalomra
🔒 Előnézet mód. Az első tizenöt Foundations lecke ingyenes; ez Pro. Indíts 7 napos trial-t, hogy feloldd a szerkesztőt, az AI tippeket és a tananyag többi részét. Kártya szükséges, bármikor lemondhatod a Dashboard-ban.7 napos trial indítása →
← KurzusokSenior Deep-DivesModule 11 · Decorator patterns at scale@contextlib.contextmanager — context managers from generatorspredict154 / 161
+150 XP
Feladat
📝 **Feladat:** A 11 soros kimenet előrejelzése. A "@contextmanager"-del díszített "measure(name)" a telepítés előtt fut, és utána a lebontást. Három blokk: normál használat, testemelések kivétel (kint fogva), és ugyanaz a kontextusnév kétszer újrafelhasználva (minden hívás egy új generátor). Ügyeljen a „<letöltés” ​​vs „elkapott hálózati hiba” sorrendjére – a végső ág, MIELŐTT a kivétel megszökne, lefut. 📋 Valósítsa meg a fenti funkciót. A tesztek automatikusan futnak. 💡 **Tipp:** Ha elakad, olvassa el újra az elméletet.
Találd ki a kimenetet

Olvasd el a kódot figyelmesen

from contextlib import contextmanager


events: list[str] = []


@contextmanager
def measure(name: str):
    events.append(f">{name}")
    try:
        yield {"name": name, "id": 42}
    finally:
        events.append(f"<{name}")


# 1. Normal use — yielded value bound to ctx
with measure("upload") as ctx:
    events.append(f"  inside: name={ctx['name']}, id={ctx['id']}")

# 2. Exception inside body — finally still runs, THEN exception escapes
try:
    with measure("download"):
        events.append("  download body")
        raise RuntimeError("network down")
except RuntimeError:
    events.append("  caught network error")

# 3. Same context name twice — each with-block creates a fresh generator
with measure("a"):
    pass
with measure("a"):
    pass

for e in events:
    print(e)

Mit ír ki a program? Írd ide:

💬 Beszélgetés

Légy az első — tegyél fel kérdést vagy oszd meg egy tippet.
Jelentkezz be hogy csatlakozz a beszélgetéshez. Az olvasás ingyenes.
Beszélgetés betöltése…