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

Python3.6定义gender函数期望返回布尔值却返回None的问题

解决gender()函数递归调用返回None的问题

兄弟,我一眼就看出问题出在哪了——你在递归调用gender()的时候,没把它的返回值传回去!

咱们先拆解下你遇到的情况:当用户输入不符合要求时,你确实重新调用了gender()让用户重新输入,但原函数的else分支里没有return这个递归调用的结果,所以当函数执行完else里的代码后,没有任何返回值,Python就默认返回None了。哪怕递归后的函数返回了正确的True/False,原调用的那层函数也没把这个结果带回来。

举个例子,你的原代码逻辑大概率是这样的:

def gender():
    gener = input("请输入性别(1/2):")
    if gener == "1":
        return True
    elif gener == "2":
        return False
    else:
        print("输入不符合要求,请重新输入!")
        gender()  # 这里没return,导致当前函数返回None

要解决这个问题,只需要在else分支里把递归调用的结果return出去就行,修改后的代码:

def gender():
    gener = input("请输入性别(1/2):")
    if gener == "1":
        return True
    elif gener == "2":
        return False
    else:
        print("输入不符合要求,请重新输入!")
        return gender()  # 加上return,把递归的结果返回给上层调用

这样一来,当用户输入错误时,递归调用gender()得到的正确结果会被返回给当前函数的调用者,就不会再出现None的情况了。

另外再给个小建议:如果不想用递归(虽然这个场景下递归几乎不会出问题,但循环逻辑更直观),也可以用while循环实现:

def gender():
    while True:
        gener = input("请输入性别(1/2):")
        if gener == "1":
            return True
        elif gener == "2":
            return False
        else:
            print("输入不符合要求,请重新输入!")

这个循环版本会一直让用户输入,直到得到符合要求的值,然后直接返回结果,同样能完美解决你的问题。

内容的提问来源于stack exchange,提问作者Gabriel Magni

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 03:36:34