когда использовать блоки try / кроме GAE - PullRequest
1 голос
/ 10 марта 2011

Я недавно начал разрабатывать свое первое веб-приложение с GAE и Python, и это очень весело.

Одна проблема, с которой я столкнулся, это возникающие исключения, когда я их не ожидал (так как я новичок в веб-приложениях). Я хочу:

  1. Запретить пользователям когда-либо видеть исключения
  2. Правильно обрабатывайте исключения, чтобы они не ломали мое приложение

Должен ли я ставить блок try / Кроме каждого вызова и получения? Какие другие операции могут потерпеть неудачу, что я должен обернуть с попыткой / кроме?

Ответы [ 2 ]

10 голосов
/ 10 марта 2011

В обработчиках запросов можно создать метод с именем handle_exception для обработки непредвиденных ситуаций.

Каркас веб-приложения вызовет его автоматически, когда обнаружит проблему

class YourHandler(webapp.RequestHandler):

    def handle_exception(self, exception, mode):
        # run the default exception handling
        webapp.RequestHandler.handle_exception(self,exception, mode)
        # note the error in the log
        logging.error("Something bad happend: %s" % str(exception))
        # tell your users a friendly message
        self.response.out.write("Sorry lovely users, something went wrong")
1 голос
/ 10 марта 2011

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

def prevent_error_display(fn):
    """Returns either the original request or 500 error page"""
    def wrap(self, *args, **kwargs):
        try:
            return fn(self, *args, **kwargs)
        except Exception, e:
            # ... log ...
            self.response.set_status(500)
            self.response.out.write('Something bad happened back here!')
    wrap.__doc__ = fn.__doc__
    return wrap


# A sample request handler
class PageHandler(webapp.RequestHandler): 
    @prevent_error_display
    def get(self):
        # process your page request
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...