معالج الاستثناء العالمي في كل شيء في محرك التطبيق للبيثون

StackOverflow https://stackoverflow.com/questions/4296504

سؤال

هل من الممكن إنشاء معالج استثناء عالمي عالمي في محرك تطبيق Google باستخدام Python؟

في الأساس ، أريد أن ألتقط جميع الاستثناءات غير المصقولة والتعامل معها بأمان ، أثناء إرسال بريد إلكتروني مع Traceback لي.

حاليًا ، لجميع الأخطاء غير المطلقة ، يرى المستخدمون مجموعة من الكود مع مقتطف من التعليمات البرمجية. هذا غير مرغوب فيه.

هل كانت مفيدة؟

المحلول

نعم هذا ممكن.
يمكنك القيام بذلك باستخدام reeporter الحزمة التي تسمح بتلقي تقارير استثناء من طلبك عن طريق البريد الإلكتروني.

سيقوم Ereporter بالإبلاغ عن نوعين من الاستثناءات:

  • استثناءات تم تسجيلها مع logging.exception('Your handled exception')
  • أي استثناءات غير معلوم

لالتقاط جميع الاستثناءات ، سأقوم بإنشاء فئة مخصصة لتجاوز handle_exception () طريقة؛ يجب أن يرث جميع معالجات طلبك من هذه الفئة الأساسية.
ألق نظرة على ردود الخطأ المخصصة جدا.

فيما يلي مثال بسيط على فئة BaseHandler:

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', {}))

نصائح أخرى

قد ترغب في الاتصال بـ Handle_Exception الأصلي عن طريق الاتصال بما يلي في BaseHandler الخاص بك:

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

هنا في السياق.

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)

حاول: اتصل باستثناء: Sendemail

http://docs.python.org/tutorial/errors.html

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top