2

所以我得到了一段让我头疼的代码。

def Handy():
    print "\nMöchten Sie ein neues Handy?"
    print "\n1 - Ja\n2 - Nein"

    handy = raw_input(">>> ")

    if handy == "2":
        print "\nSie möchten kein neues Handy"
    elif handy == "1":
        wunschhandy = raw_input("\nBitte geben Sie den Namen des Handys ein: ")
    else:
        Handy()
    return handy, wunschhandy

如果我选择选项"1"一切都好。但是,如果我去做"2"它会给我这个错误:"UnboundLocalError: local variable 'wunschhandy' referenced before assignment"

我知道为什么会这样,或者至少我认为我知道为什么。这是因为 varwunschhandy没有被清除,因为我使用了 option "2"

那么我该如何解决这个问题呢?有没有办法只返回一个值,如果它是由正确的选择分配的?

4

5 回答 5

1

如果您只想wunschhandy在用户选择“1”时返回,则将 return 语句放在 if 块中

def Handy():
    print "\nMöchten Sie ein neues Handy?"
    print "\n1 - Ja\n2 - Nein"

    handy = raw_input(">>> ")

    if handy == "2":
        print "\nSie möchten kein neues Handy"
        return handy
    elif handy == "1":
        wunschhandy = raw_input("\nBitte geben Sie den Namen des Handys ein: ")
        return handy, wunschhandy
    else:
        Handy()
        //do you want to return Handy()?
于 2013-03-26T17:22:59.130 回答
1

在你的情况下,我会在声明wunschhandy = None之前设置。if

在这种情况下,您有一个定义的值,调用者可以对其进行测试。

另一种选择是

if handy == "2":
    print "\nSie möchten kein neues Handy"
    return handy,
elif handy == "1":
    wunschhandy = raw_input("\nBitte geben Sie den Namen des Handys ein: ")
    return handy, wunschhandy
else:
    Handy()

它为选项 1 返回一个长度为 2 的元组,为选项 2 返回一个长度为 1 的元组。调用者可以轻松地对其进行测试。

此外,Handy()我不会递归调用,而是在其中放置一个循环。否则你可能会以堆栈溢出错误结束......

于 2013-03-26T17:23:24.370 回答
0

只需初始化wunschhandy,所以它在范围内:

def Handy():
    handy = raw_input("Moechten Sie ein neues Handy?\n1 - Ja\n2 - Nein\n>>> ")

    wunschhandy =  None
    if handy is "2" :
        print "\nSie moechten kein neues Handy"
    elif handy is "1" :
        wunschhandy = raw_input("\nBitte geben sie den Namen des Handys ein: ")
    else :
        Handy()
    return handy, wunschhandy
于 2013-03-26T17:26:32.837 回答
0

仅基于您提供的一小段代码,似乎只有在 'handy == "1"' 时才定义 'wunschhandy' 变量,但最后会返回此变量。我会在 if 语句上方将 wunschhandy 设置为 null,以便在尝试最后返回之前定义变量。

于 2013-03-26T17:22:35.000 回答
0

这是因为变量wunschhandy是在声明之前返回的。只有当您输入 1 时,它才会被声明。您可以wunschhandy在 if 语句之前声明并为其分配一个默认值。

于 2013-03-26T17:22:43.600 回答