我在Python 3.4中尝试处理用户输入时遇到了麻烦。在代码的两个不同位置,我向用户请求输入,然后检查其有效性。如果用户第一次输入正确的值(在本例中为0或1),这将非常有效。但是,如果用户输入了不正确的值,导致函数循环回到开头,则原始输入仍然存在。
例如,如果用户键入"asdf",则会显示"您输入了无效的规则编号"警告,并再次提示用户键入规则。然而,如果用户随后键入一个有效的数字,代码会再次循环,强制取消会给我以下错误:
File",第1行,在File中"/home/squiggly/gitstore/RCPP-RAB/RCPSP.py",第9行,主要内容selected_rule=select_rule()文件"/home/squiggly/gitstore/RCPP-RAB/RCPSP.py",第572行,在select_rule如果int(selected_rule)>=0并且int(selected_rule1: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 prioritizationn")
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()
因为您不会返回递归调用的结果,比如:
return select_rule()
在except
中,您的代码将在正确完成递归调用后进入初始select_rule()
调用的if-else
部分。这是第二次强制转换初始调用的无效selected_rule
字符串的时候。
只要返回如上所示的递归结果,它就会工作。
您缺少对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()