如何设置全局DeadlineExceededError处理程序?

时间:2011-07-28 01:39:42

标签: google-app-engine error-handling requesthandler

我想捕捉并处理DeadlineExceededError,因此用户看不到App Engine默认抛出的标准“服务器错误”页面。

我知道您的请求处理程序中的DeadlineExceededErrors是not caught when overriding handle_exception(我们已经这样做了)。

到目前为止,我已经尝试过使用custom error_handlers app.yaml configuration,但未成功:

error_handlers:
  - error_code: timeout
    file: timeout.html

...但是,除非我做错了什么,否则它似乎也没有捕获DeadlineExceededErrors。

我知道我可以使用以下模式在特定请求处理程序中捕获DeadlineExceededErrors:

class MainPage(webapp.RequestHandler):
    def get(self):
        try:
            # Do stuff...
        except DeadlineExceededError:
            # Many Whelps! Handle it!

...但我想避免将此添加到我的应用程序中的每个请求处理程序。

我如何在全球范围内捕获这些难以捉摸的吸盘?

1 个答案:

答案 0 :(得分:3)

一种可能的解决方案是使用webapp2,这是一个非常简洁的框架,并且在原始webapp上有很多有用的东西。使用webapp2,您可以在handle_500方法中处理异常,如下所示:

def BaseHandler(webapp2.RequestHandler):
    def handle_500(request, response, exception):
        if isinstance(exception, DeadlineExceededError):
            response.write('Deadline exceeded!')
        else:
            response.write('A server error occurred!')

        logging.exception(exception)
        response.set_status(500)
相关问题