خطأ وقت تشغيل Python، هل يمكن تفريغ الملف؟
-
23-08-2019 - |
سؤال
أنا أستخدم libcurl إلى صفحة الويب DL، ثم قمت بمسحها للبيانات والقيام بشيء ما بأحد الروابط. ومع ذلك، مرة واحدة في حين أن الصفحة مختلفة تماما، إلا أنني باستثناء ما استخراج البيانات السيئة وطرقي pycurl استثناء. حاولت العثور على اسم الاستثناء ل Pycurl ولكن لم يكن لديك حظ.
هل هناك طريقة يمكنني الحصول على Traceback لتنفيذ وظيفة حتى أتمكن من تفريغ الملف حتى أتمكن من إلقاء نظرة على إدخال الملف ومعرفة كان الرمز الخاص بي؟
المحلول
sys.excepthook. قد تساعدك هنا، حيث يمكنك تعيين معالج استثناء عالمي. لست متأكدا من كيفية معالجة استثناءات Pycurl، وهي مكتبة ملزمة، ولكن من المحتمل أن تعمل على إعادة تعيينها إلى وظيفة عامة. شيء مثل:
>>> import sys
>>>
>>> def my_global_exception_handler(type, value, traceback):
... print traceback
... sys.exit()
...
>>> sys.excepthook = my_global_exception_handler
>>> raise
<traceback object at 0xb7cfcaa4>
يمكن أن تكون وظيفة الخطافة الاستثناء هذه طريقة مثيل لها إمكانية الوصول إلى الملف الذي يحتاج إلى إغراق.
نصائح أخرى
يمكنك استخدام معالج استثناء عام.
logging.basicConfig( file="someFile.log", level=logging.DEBUG )
logger= logging.getLogger( __name__ )
try:
curl = pycurl.Curl()
curl.setopt(pycurl.URL, url)
# etc.
curl.perform()
curl.close
logger.info( "Read %s", url )
except Exception, e:
logger.exception( e )
print e, repr(e), e.message, e.args
raise
logging.shutdown()
سيكتب هذا سجل لطيف يحتوي على معلومات الاستثناء الذي تبحث عنه.
يمكنك التقاط جميع الاستثناءات في مكان ما في الكتلة الرئيسية واستخدام sys.exc_info () لمعلومات رد الاتصال وتسجيل ذلك إلى ملفك. EXC_INFO () إرجاع ليس فقط نوع الاستثناء، ولكن أيضا استدعاء traceback لذلك يجب أن هناك معلومات ما حدث خطأ.