6

是否可以使用 Python 在 Google App Engine 中创建一个包罗万象的全局异常处理程序?

基本上,我想捕获所有未捕获的异常并优雅地处理它,同时向我发送一封带有回溯的电子邮件。

目前,对于所有未捕获的错误,用户会看到一个堆栈跟踪,其中包含一段代码。这是不可取的。

4

3 回答 3

11

是的,有可能。
您可以使用允许通过电子邮件从您的应用程序接收异常报告的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', {}))
于 2010-11-28T12:09:48.463 回答
1

您可能希望通过在 BaseHandler 中调用以下命令来调用原始的 handle_exception:

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)
于 2011-04-11T07:02:31.720 回答
-4

尝试:调用除了:sendemail

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

于 2010-11-28T11:46:13.463 回答