نختبر إعادة المحاولة بعد فشل مؤلف. [1] [2]
الخلاصة السريعة
حارس الاستدعاء
recursive_repr يحرس الاستدعاء المتكرر للكائن في الخيط نفسه. [1] [2]
فشل ثم محاولة
from reprlib import recursive_repr
class Node:
calls=0
@recursive_repr("blocked")
def __repr__(self):
self.calls+=1
if self.calls==1:raise ValueError
return "bud"
n=Node()
try:repr(n)
except ValueError:print("ValueError")
print(repr(n),n.calls)في مثالنا، أول __repr__ تثير ValueError. [1] [2]
الاستدعاء التالي يعطي bud، وعدّاد التنفيذ 2. [1] [2]
التنظيف والنطاق
المصدر يزيل علامة الحارس داخل finally، حتى بعد الاستثناء. [1] [2]
كائن مؤلف وخيط واحد؛ لم نغيّر حد العودية. [1] [2]

المراجع
- Python 3.12: recursive_repr
- CPython 3.12.14: recursion marker cleanup
- موضوع تك: لغة بايثون — مفردات
- موضوع تك: تطبيقات بايثون — مفردات
أُعدّ هذا المقال بمساعدة الذكاء الاصطناعي، وخضع لمراجعة ذاتية بالأداة نفسها. لا يُنسب إلى مراجع بشري أو خبير مستقل. منهجية المحتوى.
