You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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操作。
执行逻辑拆解:

  1. 首次输入错误时,进入else分支,启动第二层classDecider()要求重新输入
  2. 第二层函数如果收到正确输入,会返回对应的职业字符串,但这个返回值只会停留在第二层函数的执行上下文里
  3. 第一层函数的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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.28 16:45:40