تقنية

extract_tb في بايثون: هل الحد السالب يعكس الإطارات؟

إطار أول مع حد موجب
الأول. [1] [2]

نقارن طرفي تتبع استثناء مؤلف. [1] [2]

الخلاصة السريعة

لا؛ الحد السالب يختار الإطارات الأخيرة، دون عكس ترتيبها. [1] [2]

  • الحد 1 يعيد اسم <module>. [1] [2]
  • الحد -1 يعيد اسم tail. [1] [2]
  • تتبعنا يمر عبر <module> ثم head ثم tail. [1] [2]
  • مع -2 تبقى الأسماء head ثم tail. [1] [2]
  • اختبرنا 3.12.14؛ نعرض الأسماء فقط. [1] [2]

المثال

import traceback as t
def head(): tail()
def tail(): raise ValueError('OWN')
try: head()
except ValueError as e:
    for k in (1,-1):
        rows=t.extract_tb(e.__traceback__,k)
        print([r.name for r in rows])

[1] [2]

من أين يبدأ الاختيار؟

المصدر هنا يأخذ أول الإطارات مع الحد غير السالب، وآخرها مع الحد السالب. في مثالنا، يستدعي head الدالة tail التي ترفع الخطأ. لذا لا يعني 1 أقرب إطار إلى موضع الرفع. [1] [2]

إطار أخير مع حد سالب
الأخير. [1] [2]

العدد والترتيب وحدود القراءة

الناتج ملخص إطارات، ونطبع حقل name لكل واحد. الحد -2 لا يعطي tail ثم head؛ يظل ترتيب التتبع محفوظًا. الحد 0 يعطي قائمة أسماء فارغة. لا نستنتج تشخيصًا كاملًا للخطأ من الاسم الأخير. [1] [2]

المراجع

  1. Python 3.12: traceback limits
  2. CPython 3.12.14: traceback.py
  3. موضوع تك: لغة بايثون — مفردات
  4. موضوع تك: تطبيقات بايثون — مفردات

للتوسع: بحث عن لغات البرمجة

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