多个赋值操作返回对象不可迭代

时间:2016-06-11 23:21:23

标签: python flask sqlalchemy

我不知道这意味着什么:

(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

它返回TypeError:'Admin'对象不可迭代或ValueError:当我尝试仅返回user.id时解压缩的值太多。谢谢你的帮助。

2 个答案:

答案 0 :(得分:2)

要从您的函数返回多个值(tuple),您可以执行以下操作:

# when user is admin
return True, user.id

如果用户不是管理员或存在例外情况:

return False, None

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

答案 1 :(得分: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