تقنية

closing في بايثون: هل يغلق الكائن عند وقوع خطأ؟

closing: closed تساوي True بعد الخطأ.
الإغلاق يعمل.

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: closed تساوي False بعد الخطأ.
الغلاف لا يغلق.

المقارنة والنطاق

تحكم بكائن جديد: nullcontext لا تغلقه؛ ValueError تصل أيضًا وcontrol.closed تساوي False. [1]

control=Box() try: with nullcontext(control): raise ValueError("leaf") except ValueError: print(control.closed) [1]

close هنا تنجح؛ التجربة متزامنة بعلامة حالة فقط. لا تختبر موارد فعلية أو فشل الإغلاق. [1]

المراجع

  1. Python closing/nullcontext

للتوسع: لغات البرمجة.

أُعدّ هذا المقال بمساعدة الذكاء الاصطناعي، وخضع لمراجعة ذاتية بالأداة نفسها. لا يُنسب إلى مراجع بشري أو خبير مستقل. منهجية المحتوى.