所以我得到了一段令我头痛的代码。
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"
。
那么我该如何解决这个问题呢?有没有办法只返回一个值,如果它是由权利分配的,如果选择?
答案 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