1

在我的 GAE 应用程序中,我有几个返回 JSON 格式响应的请求处理程序。当调用其中之一时,如果发生错误(异常或编程错误),则输出不是 JSON:它是堆栈跟踪。

我需要的是:

Output without error:
{
    "foo" : 1
    "bar" : 2
    "status" : "OK"
}

Output when an error occurs:
{
    "status" : "ERR"
    "errorMessage" : "An error occurred!"
}

我的问题是:确保在任何情况下输出都是 JSON 格式的响应的最佳做法是什么?当然,每个请求处理程序的通用解决方案都会很棒。

任何帮助,将不胜感激。

4

2 回答 2

2

当然 - 使用 ereporter 类(在此处描述:https ://stackoverflow.com/a/4296664/336505 ),但创建一个自定义 BaseHandler 将未捕获的异常格式化为 JSON 输出:

class BaseHandler(webapp.RequestHandler):
    def handle_exception(self, exception, debug_mode):
      self.response.headers['Content-Type'] = 'application/json'
      self.response.out.write(etc, etc) # format the exception
于 2012-08-28T09:34:23.463 回答
0

如果发生错误,为避免获得堆栈跟踪或其他丑陋的输出,您将需要使用 try ... 除了:http ://docs.python.org/tutorial/errors.html

例如

try:
    # ... your code ...
except TypeError as e:
    # ... do something with this error type
except:
    # ... generic exception catchall
    # output that JSON response
于 2012-08-28T09:01:23.623 回答