多重赋值操作返回对象不可迭代[重复]

Posted

技术标签:

【中文标题】多重赋值操作返回对象不可迭代[重复]【英文标题】:Multiple assignment operation returns object is not iterable [duplicate] 【发布时间】:2016-10-12 16:00:57 【问题描述】:

我不知道这是什么意思:

(success, admin_id) = login(email, password)

登录方法如下所示:

def login(email, password):
    try:
        user = db.session.query(Admin).filter_by(email=email).first()        

        valid_role = 'Admin'

        if valid_role in user.role:       
            return user
    except Exception as e:
        print e

    return None

当我尝试仅返回 user.id 时,它返回 TypeError: 'Admin' object is not iterable 或 ValueError: too many values to unpack to unpack。感谢您的帮助。

【问题讨论】:

【参考方案1】:

要从您的函数返回多个值 (tuple),您可以这样做:

# when user is admin
return True, user.id

如果用户不是管理员或者有异常情况:

return False, None

因此,对于(success, admin_id) = login(email, password)success 状态作为布尔值从您的函数返回,admin_id 是有效的用户 ID 或 None

【讨论】:

谢谢,这正是我要找的。​​span> 所以我分配了两个变量。有括号和没有括号有什么区别? 括号是为了便于阅读。你也可以不用它们【参考方案2】:

你的函数返回一个对象; Admin() 实例:

if valid_role in user.role:       
    return user

或者None最后:

return None

都不符合函数返回两个值的期望,这就是这一行所期望的:

(success, admin_id) = login(email, password)

要么调整该行以仅接收 用户,要么修复你的函数以返回用户 ID 和成功标志。

后者需要您将函数重写为:

def login(email, password):
    try:
        user = db.session.query(Admin).filter_by(email=email).first()        

        valid_role = 'Admin'

        if valid_role in user.role:       
            return True, user.id
    except Exception as e:
        print e

    return False, None

现在你的函数总是返回两个项目,要么是True 和用户id(不是用户对象),要么是FalseNone

【讨论】:

以上是关于多重赋值操作返回对象不可迭代[重复]的主要内容,如果未能解决你的问题,请参考以下文章

TypeError:浮点对象在我的代码中不可迭代[重复]

Multiindex Pandas Dataframe中的多重赋值[重复]

类型函数的熊猫过滤参数不可迭代[重复]

TypeError:'int'对象不可迭代-使用POOL进行多重处理

迭代对象数组时返回 false 或 true [重复]

TypeError Ajax Post - Flask Python [重复]