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
相关产品推荐
相关产品推荐

