Глобальная обработка исключений в Google App Engine

Вместо того, чтобы инкапсулировать весь мой код в блок try{} exclude{}, есть ли какой-то способ глобального перехвата исключений?

В основном я ищу способ иметь глобальный обработчик исключений, который будет обрабатывать все необработанные исключения в моем приложении python, написанном для движка приложений Google.


person demos    schedule 01.07.2010    source источник


Ответы (3)


Если вы используете инфраструктуру веб-приложений, вы уже должны определить подкласс RequestHandler, который служит базовым классом, и все обработчики вашего приложения расширяют его. Вы можете просто переопределить handle_exception, который как глобальный обработчик исключений для любых неперехваченных исключений.

по умолчанию реализация вызывает self.error(500), регистрирует исключение и, если включена отладка, выводит трассировку стека.

Если вы используете другой фреймворк, вы можете написать промежуточное программное обеспечение WSGI, которое вызывает обернутое приложение WSGI и перехватывает любые выброшенные исключения, обрабатывая их по своему усмотрению.

person Nick Johnson    schedule 01.07.2010

Что ж, на самом базовом уровне вы можете обернуть все свои сценарии обработчиков, на которые ссылается app.yaml, в гигантский блок try-except.

Если вы используете инфраструктуру веб-приложений, рассмотрите возможность переопределения handle_exception() для каждого из ваших обработчиков запросов. Если вы хотите, чтобы все ваши обработчики запросов имели некоторую базовую обработку исключений, которую вы укажете, вы можете создать обработчик запросов, который реализует этот метод, а затем получить от него все ваши обработчики.

person David Underhill    schedule 01.07.2010

Ваше приложение, вероятно, имеет функцию main(), поместите try/except в эту функцию, и оно поймает все из вашего приложения.

person Ian Bicking    schedule 01.07.2010