2009-12-26 6 views
6

में क्रैश रिपोर्टिंग क्या crash reporting ढांचा है जिसका उपयोग pure Python Tkinter applications के लिए किया जा सकता है? आदर्श रूप में, इसे क्रॉस-प्लेटफॉर्म पर काम करना चाहिए।पायथन

व्यावहारिक रूप से बोलते हुए, यह 'अपवाद रिपोर्टिंग' से अधिक है क्योंकि पाइथन दुभाषिया स्वयं शायद ही कभी दुर्घटनाग्रस्त हो जाता है।

यहां नमूने दुर्घटना संवाददाता है:

alt text

उत्तर

2

स्टिक कोशिश excepts हर जगह आपके आवेदन कुचल सकता है (आई/ओ, नेटवर्किंग आदि)। जब भी एक को छोड़कर बुलाया जाता है, तो उस फंक्शन को कॉल करें जो पुरानी विंडो को मार देगा, एक नई टिंकर अधिसूचना विंडो, या custom one को आपके त्रुटि संदेश के साथ लाएगा।

रूट करें। फिर नई विंडो पर और अपनी त्रुटि रिपोर्ट (urllib) भेजें।

यदि आप चाहें तो पुनरारंभ बटन रखें।

कोई क्रैश रिपोर्टिंग ढांचा नहीं है - क्योंकि टिंकर उस प्रकार का जीयूआई नहीं है। सरल कमांड लाइन ऐप्स के लिए यह बहुत अधिक रैपर है।

यदि आप स्क्रीन-शॉट में देखी गई सुविधाओं को देखना चाहते हैं तो pyqt/gtk या wxpython पर जाएं। लेकिन मुझे पूरा यकीन है कि आप कभी भी कहां जाते हैं, आपको अपना खुद का संवाददाता लिखना होगा।

+5

मैं इस कथन से असहमत हूं कि टिंकर "सरल कमांड लाइन ऐप्स के लिए बहुत अधिक रैपर" है। टिंकर एक पूर्ण रूप से जीयूआई लाइब्रेरी है जो सभी प्रकार के उद्देश्यों के लिए उपयुक्त है। और वास्तव में, स्क्रीनशॉट में सभी सुविधाओं को लागू करने के लिए टिकिनटर का भी उपयोग किया जा सकता है। –

+0

मैं असहमत नहीं हूं, लेकिन अगर कोई एक पूर्ण, रखरखाव जीयूआई (क्रैश रिपोर्टिंग और धागे के साथ) बनाना था, कम से कम प्रयास के साथ, कोई ऊपर सूचीबद्ध अन्य टूलकिटों में से एक का उपयोग करेगा। उनके अस्तित्व का कारण यह है कि टिंकर इस आवश्यकता को पर्याप्त रूप से पूरा नहीं करता है। – torger

7

हर जगह try..except के साथ अपने कोड को प्रदूषित करने के बजाय, आपको sys.excepthook सेट करके हुक को छोड़कर अपना स्वयं का कार्यान्वयन करना चाहिए। यहां एक उदाहरण दिया गया है:

import sys 
import traceback 

def install_excepthook(): 
    def my_excepthook(exctype, value, tb): 
     s = ''.join(traceback.format_exception(exctype, value, tb)) 
     dialog = ErrorReportDialog(None, s) 
     dialog.exec_() 

    sys.excepthook = my_excepthook 

आपका आवेदन शुरू होने पर install_exception() पर कॉल करें।

ErrorReportDialog एक क्यूटी संवाद मैंने बनाया है। traceback.format_exception() पाइथन के दुभाषिया में उसी तरह से हुक को छोड़कर तर्क को प्रारूपित करेगा।

संपादित करें: मैं इसके साथ थोड़ा गचाचा का उल्लेख करना भूल गया। यह धागे के साथ काम नहीं करता है (ठीक है, कम से कम यह पिछली बार मैंने चेक नहीं किया था)। किसी अन्य थ्रेड में चलने वाले कोड के लिए, आपको इसे try..except ब्लॉक में लपेटना होगा।