簡體   English   中英

循環模塊返回(Python 2.7.10)

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM