[英]Looped Module Return (Python 2.7.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循環不再再次調用該方法有關,但這不能解釋為什么“ print”語句按預期工作。
如果有人在這里闡明我的不合邏輯,我將不勝感激。
謝謝。
盡管其他回答者認為遞歸並不是解決問題的正確解決方案是正確的,但您遇到的實際錯誤是因為您沒有從遞歸調用中返回值。 因此,如果用戶鍵入了不存在的名稱,並且except子句調用了遞歸,則返回頂層的唯一內容是“無”,因為錯誤表明這是不可迭代的。 要解決此問題,只需確保始終返回一個值:
except KeyError:
print "No such user was listed"
return target_user()
但是,再次,遞歸不是解決此問題的方法。 除了別的什么,一個真正的不正當用戶可能很容易地胡說八道,以達到最大遞歸深度,從而導致錯誤。
您在第一個版本中的錯誤是您試圖在函數內部再次調用該函數,這是遞歸的,不適用於您的問題。 嘗試修改它以處理函數外部的異常:
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"
return None, None
target, username = None, None
while target is None:
target, username = target_user()
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.