我想捕捉并处理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!
...但我想避免将此添加到我的应用程序中的每个请求处理程序。
我如何在全球范围内捕获这些难以捉摸的吸盘?
答案 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)