Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/305.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 烧瓶错误处理程序未正确处理棉花糖验证错误_Python_Flask_Marshmallow_Flask Restplus - Fatal编程技术网

Python 烧瓶错误处理程序未正确处理棉花糖验证错误

Python 烧瓶错误处理程序未正确处理棉花糖验证错误,python,flask,marshmallow,flask-restplus,Python,Flask,Marshmallow,Flask Restplus,我不知道这是否重要,但实际上我正在使用flaskrestplus扩展 我的所有其他flask错误处理程序都按预期工作,但由于某种原因,在处理棉花糖验证错误时,响应只是我的原始请求正文,而不是棉花糖错误消息。我已经做了一些调试,我知道正在调用错误处理程序,并且可以访问ValidationError的属性(例如,验证error.messages是否为{'age':['Missing data for required field.]}) 以前有人经历过吗?感谢阅读,并提前感谢您的帮助 有效载荷: {

我不知道这是否重要,但实际上我正在使用
flaskrestplus
扩展

我的所有其他flask错误处理程序都按预期工作,但由于某种原因,在处理
棉花糖
验证错误
时,响应只是我的原始请求正文,而不是棉花糖错误消息。我已经做了一些调试,我知道正在调用错误处理程序,并且可以访问
ValidationError
的属性(例如,验证
error.messages
是否为
{'age':['Missing data for required field.]}

以前有人经历过吗?感谢阅读,并提前感谢您的帮助

有效载荷:

{"name": "Bob"}
错误处理程序:

from marshmallow.exceptions import ValidationError

@api.errorhandler(ValidationError)
def marshmallow_error_handler(error):
    # print(error.messages) results in expected {'age': ['Missing data for required field.']}
    return error.messages, 400
模式:

class SimpleSchema(Schema):
    name = fields.String(required=True)
    age = fields.String(required=True)
测试处理程序的简单路径:

@api.route("/test")
class MarshmallowTest(Resource):
    def post(self):
        SimpleSchema().load(api.payload)
预期答复:

{'age': ['Missing data for required field.']}
{"name": "Bob"}
实际答复:

{'age': ['Missing data for required field.']}
{"name": "Bob"}

我已经能够通过重写
marshmallow.Schema
handle\u error
函数并引发自定义异常来解决这个问题,但我仍然很好奇是什么导致了这种行为

我也遇到了这个错误,发现了这个Github问题

我采用的解决方法是在我自己的处理程序中覆盖异常的
数据
属性

@api.errorhandler(异常)
def handle_restx(e)中的意外事件:
app.logger.exception(e)
数据=合成错误响应(如消息)
# https://github.com/noirbizarre/flask-restplus/issues/530
e、 数据=数据
返回数据,400