Theme
Primary Color

إنشاء 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 مرة واحدة لكل دخول

python شرح