使用自定义错误处理程序时如何从中止命令访问错误消息

2024-01-21

使用 python Flask 服务器,我希望能够使用 abort 命令抛出 http 错误响应,并在正文中使用自定义响应字符串和自定义消息

@app.errorhandler(400)
def custom400(error):
    response = jsonify({'message': error.message})
    response.status_code = 404
    response.status = 'error.Bad Request'
    return response

abort(400,'{"message":"custom error message to appear in body"}')

但 error.message 变量显示为空字符串。我似乎找不到有关如何使用自定义错误处理程序访问中止函数的第二个变量的文档


如果你看flask/__init__.py https://github.com/mitsuhiko/flask/blob/d517f35d60a14fcea2e503f578e65b68eafa6577/flask/__init__.py#L17你会看到abort实际上是从进口的werkzeug.exceptions https://github.com/mitsuhiko/werkzeug/blob/5eed9385b861a1ae53c03eaae5a8dea4480113d6/werkzeug/exceptions.py#L602。看着Aborter class https://github.com/mitsuhiko/werkzeug/blob/5eed9385b861a1ae53c03eaae5a8dea4480113d6/werkzeug/exceptions.py#L578-600,我们可以看到,当使用数字代码调用时,特定的HTTPException使用提供给子类的所有参数查找并调用子类Aborter实例。看着HTTPException https://github.com/mitsuhiko/werkzeug/blob/5eed9385b861a1ae53c03eaae5a8dea4480113d6/werkzeug/exceptions.py#L74-160,特别注意第 85-89 行 https://github.com/mitsuhiko/werkzeug/blob/5eed9385b861a1ae53c03eaae5a8dea4480113d6/werkzeug/exceptions.py#L85-89我们可以看到第二个参数传递给HTTPException.__init__存储在description正如@dirn 指出的那样。

您可以从以下位置访问该消息description财产:

@app.errorhandler(400)
def custom400(error):
    response = jsonify({'message': error.description['message']})
    # etc.

abort(400, {'message': 'custom error message to appear in body'})

或者只传递描述本身:

@app.errorhandler(400)
def custom400(error):
    response = jsonify({'message': error.description})
    # etc.

abort(400, 'custom error message to appear in body')
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用自定义错误处理程序时如何从中止命令访问错误消息 的相关文章

随机推荐