Pažljivo pročitaj kod
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)
Šta će program ispisati? Napiši ovde: