何时在GAE中使用try / except块

时间:2011-03-10 15:50:32

标签: python google-app-engine exception-handling

我最近开始用GAE和Python开发我的第一个网络应用程序,这很有趣。

我一直遇到的一个问题是当我不指望它们时会引发异常(因为我是网络应用的新手)。我想:

  1. 防止用户看到异常
  2. 正确处理异常,以免它们破坏我的应用
  3. 我应该在每次看到put和get的时候放一个try / except块吗? 还有什么其他操作可能会失败,我应该用try / except包装?

2 个答案:

答案 0 :(得分:10)

您可以在请求处理程序上创建一个名为handle_exception的方法来处理意外情况。

webapp框架会在遇到问题时自动调用

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 :(得分:1)

您可以将视图包装在一个方法中,该方法将捕获所有异常,记录它们并返回一个漂亮的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