Python3递归函数重试输入正确后仍返回null问题排查
问题现象
- 玩家首次输入有效预定义职业选项时,代码可正常运行
- 输入不符合要求的内容(例如拼写错误的
theif、非可选职业的Warrior)时,函数会递归调用自身要求重新输入 - 第二次及后续调用时,即便输入内容正确,函数始终返回
null(Python环境下对应None空值)
相关代码片段
def classDecider(): print("Available Classes: Swordsman, Magician, Thief") enteredClass = input("Enter Class: ") if enteredClass == "Swordsman": return "Swordsman" elif enteredClass == "Magician": return "Magician" elif enteredClass == "Thief": return "Thief" else: classDecider() def CharacterCreation(): nameOfPlayer = input("Enter your name: ") chosenClass = classDecider() print(chosenClass) players.append(player(nameOfPlayer, chosenClass)) chosenCharacter +=1 CharacterCreation()
问题根因
递归调用的返回值没有向上透传:classDecider()的else分支仅触发了内层递归调用,没有对递归的返回值做return操作。
执行逻辑拆解:
- 首次输入错误时,进入else分支,启动第二层
classDecider()要求重新输入 - 第二层函数如果收到正确输入,会返回对应的职业字符串,但这个返回值只会停留在第二层函数的执行上下文里
- 第一层函数的else分支接收到内层返回值后没有做任何向外返回的操作,第一层函数执行完所有逻辑没有命中显式return,就会默认返回Python的空值
None,也就是你看到的null结果。
修复方案
修改else分支的代码,在递归调用前添加return关键字,把内层递归的返回值逐层传递到最外层调用即可。
修复后的classDecider()代码:
def classDecider(): print("Available Classes: Swordsman, Magician, Thief") enteredClass = input("Enter Class: ") if enteredClass == "Swordsman": return "Swordsman" elif enteredClass == "Magician": return "Magician" elif enteredClass == "Thief": return "Thief" else: return classDecider()
内容的提问来源于stack exchange,提问作者Apollox
相关产品推荐
相关产品推荐

