إنشاء Context Manager بإستخدام contextmanager
ال contextmanager بتساعدك تحدد خطوات قبل دخول with وخطوات تنظيف عند الخروج منها
تنفيذ خطوات البداية والنهاية
الجزء قبل yield بيتنفذ عند الدخول والجزء داخل finally بيتنفذ عند الخروج
from contextlib import contextmanager
@contextmanager
def session():
print("Start")
try:
yield "Ready"
finally:
print("End")
with session() as value:
print(value)النتيجة
Start
Ready
Endالتنظيف عند حدوث خطأ
ال finally بتتنفذ حتى لو حصل خطأ داخل with والخطأ بيوصل للمستدعي
from contextlib import contextmanager
@contextmanager
def session():
try:
yield
finally:
print("Cleanup")
try:
with session():
raise ValueError("Invalid")
except ValueError:
print("Handled")النتيجة
Cleanup
Handledملحوظة
الدالة المستخدمة مع contextmanager لازم توصل إلى yield مرة واحدة لكل دخول