【问题标题】:Python (flask/ marshmallow)ValueError: too many values to unpack (expected 2)Python (flask/marshmallow)ValueError: too many values to unpack (expected 2)
【发布时间】:2019-01-19 21:11:57
【问题描述】:

我正在开发一个 Flask 项目,我正在使用 marshmallow 来验证用户输入。 下面是一段代码sn-p:

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')

当我消除 errors 部分时,代码可以完美运行。当我按原样运行它时,我收到以下错误:

builtins.ValueError

ValueError:解包的值太多(预计 2 个)

Traceback(最近一次通话最后一次)

文件 "/home/..project-details.../venv3/lib/python3.6/site-packages/flask/app.py", 第 2000 行,在 call

错误 = 无

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,

注意:var in_data 是一个字典。 有什么想法吗??

【问题讨论】:

  • 你试过return (errors, 400)吗?

标签: python python-3.x api flask marshmallow


【解决方案1】:

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

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

我怀疑 python 正在尝试将 dict(作为单个对象返回)解压缩为两个变量。引发异常是因为没有任何东西可以打包到“错误”变量中。下面重现了错误:

d = dict()
d['test'] = 10101
a, b = d
print("%s : %s" % (a, b))

【讨论】:

    猜你喜欢
    • 2019-02-01
    • 2020-04-01
    • 2020-09-23
    • 1970-01-01
    • 1970-01-01
    • 2019-09-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多