在我的应用程序的服务级别,我提出异常,我希望它作为JSON打印到浏览器。
我按照文档中的说明实现了它:
raise falcon.HTTPError(
'12345 - My Custom Error',
'some text'
).to_json()
来自控制台的输出:
TypeError: exceptions must derive from BaseException
之前有人遇到过这个问题,可以帮我解决这个问题吗?
答案 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)