我根本无法理解这里发生了什么。这个问题对我的作业很重要(学习编程所以我是初学者......我的英语也不是那么好,对不起)。
我正在尝试读取一个字符串......它可以是一个数字或一定数量的命令 我只是给出一个很小的例子,说明我正在尝试做什么以及出了什么问题。
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)
问题是这个小脚本会返回完全随机的东西。
如果“退出”,则返回“无” 如果第一次输入正确,则返回正确的数字 如果第一个输入是“错误”而第二个输入是正确的,那么它再次是“无”,我根本无法理解出现了什么问题......为什么它不想工作或我应该做什么(或者)。
答案 0 :(得分:5)
如果您输入except
块,函数validate()
会使用递归调用来调用自身。当此调用返回时,它返回到调用函数的位置,即返回except
块。此时忽略validate()
的返回值,并且控件在没有命中return
语句的情况下到达外部调用的末尾,因此隐式返回None
。
不要在这里使用递归。使用循环。
答案 1 :(得分:3)
使用raw_input
代替input
(除非您使用的是Python 3.x):
choice = raw_input(">>> ")
你错过了回归:
except:
print ("Insert integer or exit")
return validate () # <<< here
另外,不要为此使用递归。改为使用循环。
答案 2 :(得分: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