closing تستدعي close عند الخروج حتى مع الخطأ؛ لا تخفي ValueError في مثالنا. [1]
الخلاصة السريعة
نعم هنا؛ الإغلاق لا يخفي الخطأ. [1]
- closing تستدعي close عند الخروج حتى مع الخطأ؛ لا تخفي ValueError في مثالنا. [1]
- على CPython 3.12.14، كائن Box يبدأ بـclosed=False؛ close تجعلها True. [1]
- داخل with، held هي own نفسها؛ بعد ValueError تصل المعالجة الخارجية وown.closed تساوي True. [1]
- تحكم بكائن جديد: nullcontext لا تغلقه؛ ValueError تصل أيضًا وcontrol.closed تساوي False. [1]
- close هنا تنجح؛ التجربة متزامنة بعلامة حالة فقط. لا تختبر موارد فعلية أو فشل الإغلاق. [1]
إغلاق وخطأ
closing تستدعي close عند الخروج حتى مع الخطأ؛ لا تخفي ValueError في مثالنا. [1]
كائن المثال
على CPython 3.12.14، كائن Box يبدأ بـclosed=False؛ close تجعلها True. [1]
عند الخروج
داخل with، held هي own نفسها؛ بعد ValueError تصل المعالجة الخارجية وown.closed تساوي True. [1]
from contextlib import closing,nullcontext class Box: def __init__(self):self.closed=False def close(self):self.closed=True own=Box() try: with closing(own) as held: print(held is own) raise ValueError("bud") except ValueError: print(own.closed) [1]

المقارنة والنطاق
تحكم بكائن جديد: nullcontext لا تغلقه؛ ValueError تصل أيضًا وcontrol.closed تساوي False. [1]
control=Box() try: with nullcontext(control): raise ValueError("leaf") except ValueError: print(control.closed) [1]
close هنا تنجح؛ التجربة متزامنة بعلامة حالة فقط. لا تختبر موارد فعلية أو فشل الإغلاق. [1]
المراجع
للتوسع: لغات البرمجة.
أُعدّ هذا المقال بمساعدة الذكاء الاصطناعي، وخضع لمراجعة ذاتية بالأداة نفسها. لا يُنسب إلى مراجع بشري أو خبير مستقل. منهجية المحتوى.
