如果if语句为真,如何返回值?

时间:2013-03-26 17:20:14

标签: python

所以我得到了一段令我头痛的代码。

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"

我知道为什么会这样,或者至少我认为我知道为什么。这是因为var wunschhandy没有被删除,因为我使用了选项"2"

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

5 个答案:

答案 0 :(得分:1)

如果只想在用户选择“1”时返回wunschhandy,则将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()?

答案 1 :(得分: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(),而是在其中放置一个循环。否则,您可能会以堆栈溢出错误结束...

答案 2 :(得分:0)

根据您提供的一小段代码,似乎'wunschhandy'变量仅在'handy ==“1”'时被定义,但此变量最后会被返回。我会将wunschhandy设置为等于if语句之上的null,以便在尝试最后返回它之前定义变量。

答案 3 :(得分:0)

这是因为变量wunschhandy在声明之前返回。只有输入1才会声明。您可以在if语句之前声明wunschhandy并为其分配一个defualt值。

答案 4 :(得分: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