【发布时间】:2016-05-08 02:37:10
【问题描述】:
我偶然发现了一个解决我的问题的方法,但我不太明白它为什么会起作用。作为参考,“用户”是指字典 { 'username' : 1234 },其中“1234”是用户 ID。
第一次尝试:
users = users_found()
def target_user():
for key in users.keys():
print key
target = raw_input("Which user do you want to target? ").lower()
try:
print users[target], target
return users[target], target
except KeyError:
print "No such user was listed"
target_user()
target, username = target_user()
以上没有奏效,违背了我的理解并返回
TypeError: 'NoneType' 对象不可迭代
引用变量赋值的最后一行。
但是,为了检查“target”是否为“NoneType”,我插入了 print 语句,这显示了我所期望的值,即使正在进行的返回似乎正在使用相同的变量寻找其他地方。
所以很自然地(真的不知道为什么)我尝试了一个while循环。
第二次尝试:
users = users_found()
def target_user():
for key in users.keys():
print key
target = raw_input("Which user do you want to target? ").lower()
while target not in users.keys():
print "No such user was listed"
for key in users.keys():
print key
target = raw_input("Which user do you want to target? ").lower()
return users[target], target
target, username = target_user()
这工作并返回两个值。
我假设这与 while 循环不再调用该方法的事实有关,但这并不能解释为什么“打印”语句按预期工作。
如果有人能阐明我在这里的不合逻辑,我将不胜感激。
谢谢。
【问题讨论】:
-
你的第一次尝试对我有用,你能提到你在哪一行出错
-
对于另一个问题,您从
raw_input获得的数据类型是字符串,这意味着users[target]可能永远不会得到您想要的结果,因为{ 1234 : 'username' }其中1234是int 或一些。 -
您的描述没有明确
usersdict中的键是字符串还是整数;如果它们是整数,那么您需要将target字符串转换为整数。此外,您在except块中的递归调用应该是return target_user();但是,正如其他人所提到的,您不需要为此进行递归(并且通常避免递归是一个好主意,除非您确实需要它)。 -
@AlokThakur 感谢您测试我的代码。这是最后一行,实际调用该函数的地方我得到了错误。
-
@Rick 感谢您的回复,我没有遇到过使用字符串和整数数据类型作为单次返回的问题,但我会继续注意它。