我已经使用GAE超过一年了,对我来说最困难的事情之一就是我的编写良好的代码可能偶尔因GAE打嗝引起异常。
对于未处理的异常,我已经有了一个不错的过程。我的自定义请求处理程序提供了一个很好的错误页面,管理员收到了然而,这是一种糟糕的用户体验。
我想要做的是处理异常,这样我就可以立即采取相应的措施并防止出现一般错误页面。
我的问题是:
我意识到对此的完整答案是不切实际的,但我正在为最常见的情况寻找一些最佳实践。
对于我应该捕获的异常,我有时会看到official list上没有的异常。例如,我收到了一个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应用程序的一个重要方面。有一些好文章here和here,但这些文章没有回答我的问题。
答案 0 :(得分:0)
我应该抓住哪些例外?
这取决于捕捉到的错误级别。根据我的经验,在官方列表和链接文章中捕获错误将使您获得非常高级别的错误捕获。如果你需要超越普通,那么除了比预测未知错误更容易。
我应该把它们抓到哪里?
GAE错误的最可能的地方是在与db进行交互时,所以如果你还没有在那里设置一些try-except块会给你一个很好的回报来处理GAE问题错误处理。
除了链接文章的建议外,您还可以考虑将失败的操作放入任务队列中。如果您不需要操作的即时反馈,每个任务将在失败前自动重试5次,这可以为您提供一些能够驾驭数据存储交换机或其他服务中断的能力。