تقنية

dump_traceback في بايثون: لماذا لا يكفي StringIO؟

StringIO بلا واصف
مخزن نص. [1] [2] [3]

نقارن مخزن نص وملفًا مؤقتًا مفتوحًا. [1] [2] [3]

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

dump_traceback يحتاج واصف ملف، لا مجرد write. [1] [2] [3]

  • StringIO يرفع UnsupportedOperation في مثالنا. [1] [2] [3]
  • الخرج: fileno ثم True في CPython3.12.14. [1] [2] [3]
  • True لوجود <module> في الملف؛ نعيد موضعه قبل القراءة. [1] [2] [3]
  • all_threads=False للخيط الحالي؛ التفريغ لا يتطلب إحداث عطل. [1] [2] [3]
  • نبقي الملف مفتوحًا أثناء التفريغ؛ يغلقه with. [1] [2] [3]

المثال

import faulthandler as h,io,tempfile
with io.StringIO() as s:
 try: h.dump_traceback(s,all_threads=False)
 except io.UnsupportedOperation: print("fileno")
with tempfile.TemporaryFile(mode="w+b") as f:
 h.dump_traceback(f,all_threads=False)
 f.seek(0)
 print(b"<module>" in f.read())

[1] [2] [3]

الواصف والتتبع

يستدعي التنفيذ fileno()، بينما لا يملك StringIO واصفًا. نفحص وجود اسم إطار <module> في بايتات الملف؛ لا نطبع قيمة dump_traceback ولا نفسر النتيجة بأنها استثناء حالي. [1] [2] [3]

الملف يتلقى التتبع
ملف مؤقت مفتوح. [1] [2] [3]

الحدود

لم نشغّل معالج أعطال أو مؤقتًا أو نسبب انهيارًا. أرقام الأسطر ومعرّف الخيط تتغير؛ لا يثبت التتبع وحده سبب خلل، ولا نختبر تتبع C. [1] [2] [3]

المراجع

  1. Python: faulthandler
  2. CPython3.12.14: faulthandler.c
  3. Python: IOBase.fileno
  4. موضوع تك: لغة بايثون — مفردات
  5. موضوع تك: تطبيقات بايثون — مفردات

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