3

我已经使用 GAE 一年多了,对我来说最难处理的事情之一是我原本写得很好的代码可能偶尔会因为 GAE 打嗝而引发异常。

对于未处理的异常,我已经有了一个不错的程序。我的自定义请求处理程序提供了一个不错的错误页面,管理员会收到一封电子邮件。然而,这是一种糟糕的用户体验。

我想做的是处理异常,以便我可以立即采取适当的措施并防止出现一些通用错误页面。

我的问题是:

  1. 我应该捕获哪些异常?
  2. 我应该在哪里抓到它们?

我意识到对此的完整答案是不切实际的,但我正在为最常见的情况寻找一些最佳实践。

对于我应该捕获的异常,我有时会看到不在官方列表中的异常。例如,我收到了 UnknownError。

对于在哪里捕获异常,我想知道是否应该在每个 get/post 方法中捕获它们。像这样的东西:

def get(self):
    try:
        # normal get processing
    except SomeException:
        # redirect to the same page to try again and fix any data if necessary

我很惊讶没有更多关于此的信息,因为这是任何 GAE 应用程序的一个重要方面。这里这里有一些很好的文章,但这些并不能回答我的问题。

4

1 回答 1

0

我应该捕获哪些异常?

这取决于您要捕获的错误级别。根据我在官方列表和链接文章中捕获错误的经验,您将获得非常高水平的错误捕获。如果您需要超越这一点,那么放入泛型 except 比尝试预测未知错误更容易。

我应该在哪里抓到它们?

GAE 错误最有可能发生的地方是与数据库交互时,因此如果您没有设置一些 try-except 块,那么您在处理 GAE 问题错误处理方面的努力会得到很好的回报。

除了链接文章的建议之外,您还可以考虑将失败的操作放入任务队列。每个任务将在失败前自动重试 5 次,如果您不需要操作的即时反馈,这可以让您在一定程度上避免数据存储切换或其他服务中断。

于 2012-07-03T23:53:12.287 回答