Python未返回预期值
我实在搞不懂这里发生了什么。这个问题对我的作业很重要(我在学习编程,所以还是个初学者……而且我的英语也不太好,抱歉)。
我正在尝试读取一个字符串……它可以是一个数字,也可以是一组特定的命令。
我就给个很小的例子,说明我想做什么以及哪里出错了。
def validate():
choice = str(input(">>> "))
if (choice == "exit"):
return 0 # should exit validate
else:
try:
aux = int(choice) # Tries converting to integer
except:
print("Insert integer or exit")
validate() # If it can't convert, prompts me to try again through
# recursivity
else:
return aux
rezult = validate()
print (rezult)
问题是这个小脚本返回的结果完全是随机的。
如果输入是“exit”,它返回“None”。
如果第一个输入是正确的,它会返回正确的数字。
如果第一个输入是“错误”,而第二个输入是正确的,它又返回“None”,我就是搞不懂哪里出了问题……为什么它不想工作,或者我应该怎么做(或者说,替代方案)。
3 个回答
1
好的,我决定听取建议,把递归的部分改成了循环,感谢你的帮助。(现在可以用了)
def validateChoice():
condition = False
while (condition == False):
choice = str (input (">>> "))
if (choice == "exit"):
return 0
else:
try:
aux = int (choice)
except:
print ("Insert integer or 'exit'")
else:
condition = True
return aux
3
在使用Python时,如果你不是在用Python 3.x版本,就用raw_input
代替input
。
choice = raw_input(">>> ")
另外,你这里缺少一个返回值。
except:
print ("Insert integer or exit")
return validate () # <<< here
还有,不要用递归来解决这个问题,改用循环会更好。
6
如果你进入了except
这个代码块,函数validate()
会用一种叫做递归调用的方法来再次调用自己。当这个调用结束后,它会回到最开始调用它的地方,也就是except
代码块里。此时,validate()
的返回值会被忽略,控制权会直接到达外层调用的结尾,而没有遇到return
语句,所以会隐式返回None
。
在这里不要使用递归,应该用循环。