Python整数输入校验递归函数无法返回正确结果该如何解决?
问题修复方案
问题根因
- 原代码的递归调用没有返回计算结果,触发
ValueError后递归得到的合法整数没有被传回上层调用,最终函数始终返回初始传入的未修改的intvar参数 - 冗余参数说明:
intvar参数无实际作用,输入的合法值直接返回即可,不需要通过参数传递
修复方案1:调整递归逻辑
仅需在递归调用时直接返回其结果即可完成需求:
def intsytaxcheck(inputstatement): try: return int(input(inputstatement)) except ValueError: print("Only integers (1,43,532) are allowed!") # 直接返回递归调用的结果,将合法值向上传递 return intsytaxcheck(inputstatement) a = intsytaxcheck("Enter Rollnum: ") print(a)
修复方案2:更推荐的while循环实现(避免递归深度超限)
递归写法如果用户连续输入错误次数过多,会触发Python递归深度限制报错,用无限循环的写法更稳定,也更符合这类输入校验的常规实现逻辑:
def intsytaxcheck(inputstatement): while True: try: # 输入合法直接返回,结束循环 return int(input(inputstatement)) except ValueError: print("Only integers (1,43,532) are allowed!") a = intsytaxcheck("Enter Rollnum: ") print(a)
内容的提问来源于stack exchange,提问作者Akash S Vidhyaniketan
相关产品推荐
相关产品推荐

