Глобальный обработчик исключений Catch-All в App Engine для Python - PullRequest
6 голосов
/ 28 ноября 2010

Можно ли создать универсальный обработчик исключений в Google App Engine с использованием Python?

По сути, я хочу перехватить все незамеченные исключения и изящно обработать их, отправляя мне электронное письмо с отслеживанием.

В настоящее время для всех необнаруженных ошибок пользователи видят трассировку стека с фрагментом кода в нем. Это нежелательно.

Ответы [ 3 ]

11 голосов
/ 28 ноября 2010

Да, это возможно.
Вы можете сделать это с помощью пакета ereporter , который позволяет получать отчеты об исключениях из вашего приложения по электронной почте.

Ereporter сообщит о двух видах исключений:

  • исключений, зарегистрированных с logging.exception('Your handled exception')
  • любыми неперехваченными исключениями

Чтобы перехватить все исключения, я бы создал собственный класс BaseHandler, переопределяющий 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', {}))
1 голос
/ 11 апреля 2011

Возможно, вы захотите вызвать оригинальное 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)
0 голосов
/ 28 ноября 2010

попробуй: позвони кроме: sendemail

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

...