多重赋值操作返回对象不可迭代[重复]
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(不是用户对象),要么是False
和None
。
【讨论】:
以上是关于多重赋值操作返回对象不可迭代[重复]的主要内容,如果未能解决你的问题,请参考以下文章
Multiindex Pandas Dataframe中的多重赋值[重复]