2010-11-28 9 views
6

के लिए एप्लिकेशन इंजन में वैश्विक अपवाद संचालक यह संभव कैच-ऑल वैश्विक अपवाद Google अनुप्रयोग इंजन में हैंडलर अजगर का उपयोग कर बनाने के लिए है?कैच-सभी अजगर

असल में, मैं सभी गैर-पकड़ा अपवाद को पकड़ने के लिए और शान से इसे संभाल, जबकि मेरे लिए ट्रैस बैक के साथ एक ईमेल भेज चाहते हैं।

वर्तमान में, सब ध्यान में न आया त्रुटियों के लिए, उपयोगकर्ताओं के लिए यह में कोड का एक टुकड़ा के साथ एक स्टैकट्रेस देखते हैं। यह अवांछनीय है।

उत्तर

11

हाँ, यह संभव है।
आप ereporter पैकेज है कि ईमेल द्वारा अपने आवेदन से अपवाद रिपोर्ट प्राप्त करने के लिए अनुमति देता है का उपयोग कर ऐसा कर सकते हैं। ,

  • अपवाद किसी भी ध्यान में न आया अपवाद

सभी अपवादों को पकड़ने के लिए logging.exception('Your handled exception')

  • के साथ प्रवेश किया मैं एक कस्टम BaseHandler वर्ग handle_exception() अधिभावी बनाना होगा:

    Ereporter अपवादों में से दो तरह रिपोर्ट करेंगे तरीका; आपके सभी अनुरोध हैंडलर को इस बेस क्लास से उत्तराधिकारी होना चाहिए।
    Custom Error Responses पर भी एक नज़र डालें।

    class BaseHandler(webapp.RequestHandler): 
    
        def handle_exception(self, exception, debug_mode): 
         if debug_mode: 
          webapp.RequestHandler.handle_exception(self, exception, debug_mode) 
         else: 
          logging.exception(exception) 
          self.error(500) 
          self.response.out.write(template.render('templdir/error.html', {})) 
    
  • +0

    में चल रहे मेरे एप्लिकेशन में वैश्विक स्तर पर त्रुटियों को कैसे पकड़ सकता हूं! ऐसा लगता है कि यह मेरी समस्या का आधा हल करता है, लेकिन जब यह सक्षम होता है तो उपयोगकर्ता क्या देखता है जब एक अनचाहे अपवाद होता है? क्या उपयोगकर्ता को सभी अनचाहे अपवादों के लिए डिफ़ॉल्ट त्रुटि पृष्ठ पर रीडायरेक्ट करने के लिए कुछ है? – Derick

    +0

    @Derick मेरा संपादन देखें – systempuntoout

    +0

    धन्यवाद! मैं अजगर पर इतना अच्छा नहीं हूं, क्या आप वेबपैप के लिए ऐसा करने के तरीके पर कोड स्निपेट शामिल कर सकते हैं। ReequestHandler क्लास? वास्तव में सराहना करेंगे। – Derick

    1

    आप अपने BaseHandler में निम्नलिखित को फोन करके मूल handle_exception कॉल करने के लिए चाहते हो सकता है:

    webapp.RequestHandler.handle_exception(self, exception, debug_mode) 
    

    यहाँ यह संदर्भ में है

    यहाँ BaseHandler वर्ग का एक सरल उदाहरण है।

    from google.appengine.ext import webapp 
    import sys 
    import traceback 
    
    class BaseHandler(webapp.RequestHandler): 
        def handle_exception(self, exception, debug_mode): 
         from main import emaildevs 
         emaildevs('An error occurred on example.com', ''.join(traceback.format_exception(*sys.exc_info()))) 
         webapp.RequestHandler.handle_exception(self, exception, debug_mode)