Python(烧瓶/棉花糖)ValueError:解包的值太多(预期为2)

Syl*_*ter 2 python api flask python-3.x marshmallow

我正在做一个 Flask 项目,我正在使用棉花糖来验证用户输入。下面是一个代码片段:

def create_user():
    in_data = request.get_json()
    data, errors = Userschema.load(in_data)
    if errors:
        return (errors), 400
    fname = data.get('fname')
    lname = data.get('lname')
    email = data.get('email')
    password = data.get('password')
    cpass = data.get('cpass')
Run Code Online (Sandbox Code Playgroud)

当我消除该errors部分时,代码运行良好。当我按原样运行它时,出现以下错误:

内置值错误

ValueError:解包的值太多(预期为 2)

回溯(最近一次调用最后一次)

文件“/home/..project-details.../venv3/lib/python3.6/site-packages/flask/app.py”,第 2000 行,调用中

错误 = 无

ctx.auto_pop(错误)

def __call__(self, environ, start_response):
    """Shortcut for :attr:`wsgi_app`."""
    return self.wsgi_app(environ, start_response)


def __repr__(self):
    return '<%s %r>' % (
        self.__class__.__name__,
        self.name,
Run Code Online (Sandbox Code Playgroud)

注意:varin_data是一个字典。有任何想法吗??

小智 6

我建议你检查你的依赖版本。根据Marshmallow API 参考,schema.load 返回:

在 3.0.0b7 版更改:此方法返回反序列化的数据,而不是 (data, errors) 副本。如果传递了无效数据,则会引发 ValidationError。

我怀疑 python 试图将 dict (作为单一对象返回)解包为两个变量。引发异常是因为没有任何内容可以打包到“错误”变量中。以下重现错误:

d = dict()
d['test'] = 10101
a, b = d
print("%s : %s" % (a, b))
Run Code Online (Sandbox Code Playgroud)