Flask错误处理程序无法处理断言错误



我使用Flask RESTful构建RESTapi和用于解析的webargs。

在定义资源时,我希望参数存在,所以我写了required=True

例如:

class Name(Resource):
"""Retrieve ids corresponding to given names
Input entries: String
"""
args = {
'entries' : fields.Str(required=True),
}
@use_kwargs(args)
def get(self, entries):
    # HTTP method GET
    result = object.find_id(entries)
    return jsonify(result)

现在,

在为API执行单元测试时,显式地不指定条目,它返回断言错误

Traceback (most recent call last):
File "/usr/local/lib/python2.7/dist-packages/flask/app.py", line 1836, in __call__
return self.wsgi_app(environ, start_response)
  File "/usr/local/lib/python2.7/dist-packages/flask/app.py", line 1820, in wsgi_app
response = self.make_response(self.handle_exception(e))
  File "/usr/local/lib/python2.7/dist-packages/flask_restful/__init__.py", line 271, in error_router
return original_handler(e)
  File "/usr/local/lib/python2.7/dist-packages/flask/app.py", line 1403, in handle_exception
reraise(exc_type, exc_value, tb)
  File "/usr/local/lib/python2.7/dist-packages/flask_restful/__init__.py", line 268, in error_router
return self.handle_error(e)
  File "/usr/local/lib/python2.7/dist-packages/flask/app.py", line 1817, in wsgi_app
response = self.full_dispatch_request()
  File "/usr/local/lib/python2.7/dist-packages/flask/app.py", line 1477, in full_dispatch_request
rv = self.handle_user_exception(e)
  File "/usr/local/lib/python2.7/dist-packages/flask_restful/__init__.py", line 271, in error_router
return original_handler(e)
  File "/usr/local/lib/python2.7/dist-packages/flask/app.py", line 1363, in handle_user_exception
assert exc_value is e
AssertionError

当我检查时,exc_value是

TypeError("ValidationError({'entries': [u'Missing data for required field.']}, status_code=422, headers={}) is not JSON serializable",) 

e是

<UnprocessableEntity '422: Unprocessable Entity'>

现在,

我有这些方法来处理这个异常@app.errorhandler(500)

@app.errorhandler(ValidationError)

@app.errorhandler(TypeError)

@app.errorhandler(UnprocessableEntity)

@app.errorhandler(422)

@app.errorhandler(异常)

我不知道为什么即使这样也不起作用

@app.errorhandler(断言错误)

对此:链接但无法解决

我正在使用烧瓶(0.10.1)烧瓶Restful(0.3.5)webargs(1.2.0)

我今天才遇到这个问题(尽管我已经使用Flask RESTplus将近一年了),这是一个奇怪的发现。我只在Python 2.7中看到这个问题,而Python 3.3、3.4、3.5运行良好。

因此,我认为它应该被视为webargs或Flask中的兼容性错误,我还不确定。

更新:在深入研究了这个问题之后,我最终进入了webargs,并在那里提交了一个故障排除问题:https://github.com/sloria/webargs/issues/122

更新2:以下是我修复此问题的PR:https://github.com/sloria/webargs/pull/123

最新更新