Python函数输入任意数字均返回NoneType类型None值的原因排查
代码返回None的原因
核心问题是流程控制语句位置错误,导致函数没有执行到return语句就提前结束运行,具体问题点如下:
- 你在
try代码块中成功把用户输入转为整数后,立刻执行了break语句,这个语句会直接跳出最外层的while True循环。而你的return number_of_pizzas是写在while True循环体内部的,一旦跳出循环,函数就会直接运行到末尾,Python中没有显式返回值的函数会默认返回None,这就是你无论输入什么有效数字都拿到None的根本原因。 - 原代码的范围校验逻辑存在额外bug:
- 大小判断用了独立的
while循环,但循环内打印完提示就直接break,既不会让用户重新输入,逻辑也没有接入正确的输入流程 - 如果用户输入非数字内容触发
ValueError,number_of_pizzas变量根本不会被赋值,后续的大小判断代码访问这个变量时会直接触发NameError报错
- 大小判断用了独立的
修正后的可运行代码
调整控制流逻辑:输入非数字时提示后重输,输入数字但超出范围时提示后重输,只有输入完全符合1-5的区间要求时,才返回对应的数值:
max_pizzas = 5 min_pizzas = 1 def get_number_of_pizzas(): while True: try: number_of_pizzas = int(input("How many pizzas would you like?")) except ValueError: print("Please enter a valid number.") continue # 校验数值范围 if number_of_pizzas > max_pizzas: print(f"We cannot deliver more than {max_pizzas} pizzas.") continue if number_of_pizzas < min_pizzas: print("Why are you here if you're not going to order?") continue # 所有校验通过,返回结果 return number_of_pizzas number_of_pizzas = get_number_of_pizzas() print(number_of_pizzas)
内容的提问来源于stack exchange,提问作者Snoorlacks
相关产品推荐
相关产品推荐

