【问题标题】: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。感谢您的帮助。

【问题讨论】:

    标签: python flask sqlalchemy


    【解决方案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

    【讨论】:

      猜你喜欢
      • 2018-11-29
      • 2015-10-23
      • 2018-11-26
      • 2019-12-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-05-30
      • 1970-01-01
      相关资源
      最近更新 更多