如何像json一样引发异常?

时间:2017-08-04 22:47:05

标签: python exception falconframework

在我的应用程序的服务级别,我提出异常,我希望它作为JSON打印到浏览器。

我按照文档中的说明实现了它:

raise falcon.HTTPError(
    '12345 - My Custom Error',
    'some text'
).to_json()

来自控制台的输出:

TypeError: exceptions must derive from BaseException

之前有人遇到过这个问题,可以帮我解决这个问题吗?

2 个答案:

答案 0 :(得分:2)

你正在尝试提高字符串。正确的方法是使用set_error_serializer()

文档中的示例似乎正是您所需要的(加上YAML支持)。

def my_serializer(req, resp, exception):
    representation = None

    preferred = req.client_prefers(('application/x-yaml',
                                    'application/json'))

    if preferred is not None:
        if preferred == 'application/json':
            representation = exception.to_json()
        else:
            representation = yaml.dump(exception.to_dict(),
                                       encoding=None)
        resp.body = representation
        resp.content_type = preferred

    resp.append_header('Vary', 'Accept')

app = falcon.API()
app.set_error_serializer(my_serializer)

答案 1 :(得分:0)

创建falcon文档中解释的自定义异常类,搜索add_error_handler

class RaiseUnauthorizedException(Exception):
    def handle(ex, req, resp, params):
        resp.status = falcon.HTTP_401
        response = json.loads(json.dumps(ast.literal_eval(str(ex))))
        resp.body = json.dumps(response)

将自定义异常类添加到falcon API对象

api = falcon.API()
api.add_error_handler(RaiseUnauthorizedException)

导入自定义异常类并传递消息

message = {"status": "error", "message" : "Not authorized"}
RaiseUnauthorizedException(message)