contextmanager-async سياق async with
آخر تحديث: 2026-09-22
contextmanager-async سياق async with
async with يُستخدم مع مدير سياق غير متزامن: الدخول والخروج كلاهما ينتظران دوال غير متزامنة.
| التصنيف | الكلمات المفتاحية والعبارات |
|---|---|
| النوع | كلمة مفتاحية / عبارة |
| إصدار بايثون | 3.5+ |
📝 الصياغة
async with expr [as var]:
block
▶ مثال
عدّل الكود واضغط تشغيل لرؤية النتيجة في لوحة المخرجات:
المخرجات:
Ctx
🏷️ كلمات مفتاحية / عبارات ذات صلة
💡 حالات ذات صلة
المزيد من الحالات قادم قريباً — تابعونا.
❓ أسئلة شائعة
Qما الفرق بين `async with` و`with` العادية؟
A`async with` مخصص لمديري السياق غير المتزامنين: الدخول والخروج يستخدم `await` على الطريقتين غير المتزامنتين `__aenter__` / `__aexit__`. بينما تستدعي `with` العادية `__enter__` / `__exit__` المتزامنة.
Qهل يمكن كتابة `async with` داخل دالة عادية؟
Aلا. يمكن أن يظهر `async with` فقط داخل دالة `async def`. كتابته في دالة عادية يعطي `SyntaxError: 'async with' outside async function`.
Qكيف يمكن لفئتي الخاصة دعم `async with`؟
Aنفّذ طريقتين غير متزامنتين: `async def __aenter__(self)` تُرجع الكائن المُدخِل، و`async def __aexit__(self, exc_type, exc, tb)` تقوم بالتنظيف. إرجاع `True` من `__aexit__` يبتلع الاستثناء؛ وإرجاع `False` (أو لا شيء) يتركه ينتشر.