• 0

كيف أحصل على معلومات exception في بايثون؟

أحتاج إلى الحصول على المعلومات مثل نوع الخطأ واسم الملف ورقم السطر من exception التالي:

Traceback (most recent call last):
  File "c:/tmp.py", line 1, in <module>
    4 / 0
ZeroDivisionError: integer division or modulo by zero

أي أنني أريد شيفرة برمجية للحصول على هذه المعلومات:

ZeroDivisonError, tmp.py, 1

فكيف يمكنني فعل ذلك؟

انشر على الشّبكات الاجتماعية


رابط هذه المساهمة
  • 0

هنالك عدّة طرق للحصول على المعلومات التي تحتاجها من except في بايثون، فيمكنك على سبيل المثال استخدام وحدات sys وos وبعد ذلك الحصول على المعلومات التي تحتاجها من دالة exc_info() وعلى الملف الذي تريده من دالة path ومن ثم من أول عنصر من exc_tb.tb_frame.f_code.co_filename كما في المثال التالي:

import sys, os

try:
    raise NotImplementedError("No error")
except Exception as e:
    exc_type, exc_obj, exc_tb = sys.exc_info()
    fname = os.path.split(exc_tb.tb_frame.f_code.co_filename)[1]
    print(exc_type, fname, exc_tb.tb_lineno)

يوجد حل آخر أقصر من الأول وهو استخدام مكتبات traceback وos.path لطباعة المعلومات التي تريدها كالتالي:

try:
    bla
except Exception as e:
    import traceback, os.path
    top = traceback.extract_stack()[-1]
    print ', '.join([type(e).__name__, os.path.basename(top[0]), str(top[1])])

انشر على الشّبكات الاجتماعية


رابط هذه المساهمة

يجب أن تكون عضوًا لدينا لتتمكّن من التعليق

انشاء حساب جديد

يستغرق التسجيل بضع ثوان فقط


سجّل حسابًا جديدًا

تسجيل الدخول

تملك حسابا مسجّلا بالفعل؟


سجّل دخولك الآن