【问题标题】:How can I setup a global DeadlineExceededError handler?如何设置全局 DeadlineExceededError 处理程序?
【发布时间】:2011-10-14 18:13:39
【问题描述】:

我想捕获并处理 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!

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

我如何才能在全球范围内抓住这些难以捉摸的傻瓜?

【问题讨论】:

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


    【解决方案1】:

    一个可能的解决方案是使用 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)
    

    【讨论】:

    • 在 webapp2 中,您可以设置一个错误处理程序来处理 500 状态码——主要用于未捕获的异常。在那里,检查它是什么类型的异常并相应地处理: if isinstance(exception, DeadlineExceededError): ... 文档在这里:webapp-improved.appspot.com/guide/…
    • 我其实不知道;是的,那将是放置错误处理的更合适的地方。
    • 这是我的建议。但是,请不要发送错误重定向 - 在同一 URL 上提供错误页面。
    • 是的,那只是填充物。我确实认为这是一个不好的例子,我会改变它。
    • @moraes 这很像web.py 所做的,非常方便。
    猜你喜欢
    • 2013-07-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-03-06
    • 2012-02-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多