Python while循环递归调用输入函数无法正确返回有效值问题
问题根因
原代码存在三个核心逻辑错误,导致重试后返回None、加continue后出现多余循环:
- 非法输入分支中递归调用
Input.input_pos()时,没有接收递归调用的返回值。就算递归层级里拿到了合法输入,当前函数层也无法获取这个结果,最后会走到循环末尾的break直接退出,返回Python函数默认的None。 - 混用了循环重试和递归重试两套逻辑:本身已经用
while True写了循环重试的框架,又在错误分支加递归调用,再加continue之后,递归调用产生的多层函数调用会依次执行,就会出现和非法输入次数一致的多余重复循环。 - 循环末尾多余的
break会强制终止第一次循环,不管重试流程有没有拿到合法值,都会直接跳出循环。
修正代码
不需要用递归,直接依托现有while True循环做重试即可:非法输入时打印提示,让循环自动进入下一轮重新接收输入,合法输入直接return返回值,既不会丢失返回结果,也不会产生多余的递归调用。
class Input(): @staticmethod def input_pos(): while True: try: postura = int(input("Postura ")) if 6 <= postura <= 10: return postura print("debes escribir un número del 6 al 10") except ValueError: print("Error, debes elegir un número del 6 al 10")
改动说明
- 删除所有递归调用
Input.input_pos()的逻辑,错误场景下不需要重复调用方法,循环会自动重新执行输入流程 - 删除循环末尾多余的
break,避免循环无意义提前终止 - 将重复的多分支等值判断简化为范围判断,精简冗余代码
- 移除冗余的通用
Exception捕获,避免吞掉非预期的程序错误 - 增加
@staticmethod装饰器,适配方法不需要访问实例/类属性的设计,符合Python类的编写规范
内容的提问来源于stack exchange,提问作者Juan Martinez
相关产品推荐
相关产品推荐

