Как я могу установить глобальный обработчик DeadlineExceededError? - PullRequest
8 голосов
/ 28 июля 2011

Я бы хотел поймать и обработать DeadlineExceededError, чтобы пользователи не видели стандартную страницу «Ошибка сервера», которую по умолчанию выдает App Engine.

Я знаю, что DeadlineExceededErrors не перехватывается при переопределении handle_exception в вашем обработчике запросов (мы уже делаем это).

Я до сих пор безуспешно пытался использовать пользовательскую конфигурацию error_handlers app.yaml примерно так:

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 Ответ

3 голосов
/ 28 июля 2011

Одним из возможных решений является использование 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)
...