今天在撸代码的时候出现一个问题:有些abort能够正常返回指定的状态码以及描述(description),但有些就直接返回200,而且没有任何描述
这是由于你可能把abort包裹在try-except结构中了
如下所示:
def foo():
abort(400, description={
'success': False,
'code': 4019,
'message': '事务执行失败,回滚',
'data': None
})
try:
foo()
except Exception as e:
...
这里的原因就是abort自身会raise werkzeug.exceptions.HTTPException异常,而这个异常没有被except Exception as e捕获,所以代码就继续往下执行了,如果后面没有代码了,flask就会只返回200
总而言之就是abort后并没有按照设想的一样直接返回response,而是被try-except截获了,且截获后并没有匹配到异常
解决办法就是不要在try中包含abort,而把abort交给except处理
如下所示
class ComboCheckError(Exception):
...
def foo():
raise ComboCheckError({
'success': False,
'code': 4019,
'message': '事务执行失败,回滚',
'data': None
})
try:
foo()
except ComboCheckError as e:
abort(400, description=e.args[0])
注意:e的类型为<class ‘main.ComboCheckError’>而非dict,而e.args[0]为dict