我在使用Python 3.4中的用户输入时遇到了麻烦。在我的代码中的两个不同位置,我要求用户输入,然后检查它的有效性。如果用户第一次输入正确的值(在这种情况下,为0或1),这将完美地起作用。但是,如果用户输入的值不正确,导致函数循环回到开头,则原始输入仍然存在。
例如,如果用户键入" asdf," "您输入了无效的规则编号"警告显示,并再次提示用户键入规则。但是,如果用户然后键入有效数字,代码将再次循环,并且强制取消会给我以下错误:
文件"",第1行,在文件中 " /home/squigglily/gitstore/RCPSP-RAB/RCPSP.py" ;,第9行,主要 selected_rule = select_rule()File" /home/squigglily/gitstore/RCPSP-RAB/RCPSP.py" ;,第572行,in select_rule if int(selected_rule)> = 0和int(selected_rule)< = 1:ValueError:对于带有基数10的int()的无效文字:' asklawer'
给我带来麻烦的代码:
def select_rule():
selected_rule = 0
selected_rule = input("\nPlease type the number corresponding with the "
"prioritization rule you would like to use: "
"\n 0 - No prioritization, ignore all resource constraints"
"\n 1 - Lowest task number prioritization\n")
try:
int(selected_rule) + 1 - 1
except:
print("\nYou have entered an invalid rule number. Please try again.\n")
select_rule()
if int(selected_rule) >= 0 and int(selected_rule) <= 1:
selected_rule = int(selected_rule)
return(selected_rule)
else:
print("\nYou have entered an invalid rule number. Please try again.\n")
select_rule()
答案 0 :(得分:1)
由于您没有返回递归调用的结果,如:
return select_rule()
在except
中,在正确完成递归调用后,您的代码将进入初始if-else
调用的select_rule()
部分。那是在第二次投射初始调用的无效selected_rule
字符串时。
如上所示,只返回递归结果即可。
答案 1 :(得分:0)
您缺少返回select_rule()函数
如果
,你也可以做一切if type(selected_rule) == int and int(selected_rule) >= 0 and int(selected_rule) <= 1:
selected_rule = int(selected_rule)
return(selected_rule)
else:
print("\nYou have entered an invalid rule number. Please try again.\n")
return select_rule()