【发布时间】:2011-05-16 20:09:38
【问题描述】:
是否可以使用 Python 在 Google App Engine 中创建包罗万象的全局异常处理程序?
基本上,我想捕获所有未捕获的异常并优雅地处理它,同时向我发送一封带有回溯的电子邮件。
目前,对于所有未捕获的错误,用户会看到一个堆栈跟踪,其中包含一个 sn-p 代码。这是不可取的。
【问题讨论】:
标签: google-app-engine exception-handling catch-all
是否可以使用 Python 在 Google App Engine 中创建包罗万象的全局异常处理程序?
基本上,我想捕获所有未捕获的异常并优雅地处理它,同时向我发送一封带有回溯的电子邮件。
目前,对于所有未捕获的错误,用户会看到一个堆栈跟踪,其中包含一个 sn-p 代码。这是不可取的。
【问题讨论】:
标签: google-app-engine exception-handling catch-all
是的,这是可能的。
您可以使用ereporter 包来完成此操作,该包允许通过电子邮件从您的应用程序接收异常报告。
Ereporter 会报告两种异常:
logging.exception('Your handled exception') 记录的异常
为了捕获所有异常,我将创建一个自定义 BaseHandler 类来覆盖handle_exception() 方法;您的所有请求处理程序都应该继承自这个基类。
也可以看看Custom Error Responses。
下面是 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', {}))
【讨论】:
您可能希望通过在 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)
【讨论】:
尝试: 称呼 除了: 发邮件
【讨论】: