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

编写递归函数通过input校验用户输入时return返回结果异常问题咨询

问题根因

你当前代码的返回值异常来自两个核心逻辑错误:

  • 递归调用结果未回传:异常分支中调用get_pizza_info()后,你没有将递归得到的正确返回值向上层传递,反而直接返回了None,导致最终调用方拿到的是空值而非校验后的参数
  • 递归设计不合理:任意一步输入错误就重新调用整个函数,已经输入正确的内容也需要重复填写,体验极差,且递归层级过高会触发栈溢出报错

解决方案

最小改动修复现有递归逻辑

如果要保留你现有的递归写法,只需要删除异常分支的return None,改为直接返回递归调用的结果即可,同时原函数不需要传入参数,因为所有参数都会被内部输入覆盖:

def get_pizza_info():
    try:
        size = int(input("Enter size from 1-3: "))
    except ValueError:
        print("Error, please enter a whole number. ")
        return get_pizza_info()
    try:
        meats = int(input("Enter number of meat toppings "))
    except ValueError:
        print("Error, enter a whole number. ")
        return get_pizza_info()
    try:
        veg = int(input("Enter number of non-meat toppings "))
    except ValueError:
        print("Error, enter a whole number. ")
        return get_pizza_info()
    try:
        quantity = int(input("Enter number of these pizzas "))
    except ValueError:
        print("Error, enter a whole number. ")
        return get_pizza_info()
    if size >= 4:
        size = 3
    if size <= 1:
        size = 1
    if meats <= 1:
        meats = 1
    if veg <= 1:
        veg = 1
    return size, meats, veg, quantity

更推荐的循环实现(生产环境优先使用)

递归实现的体验和稳定性都很差,建议将整数输入校验抽为通用函数,单步输入出错只重输当前项,不需要重复填写之前的正确内容:

# 通用整数输入校验函数,支持设置最小值
def input_valid_int(prompt, min_value=None):
    while True:
        try:
            input_num = int(input(prompt))
            if min_value is not None and input_num < min_value:
                input_num = min_value
            return input_num
        except ValueError:
            print("Error, please enter a whole number. ")

def get_pizza_info():
    size = input_valid_int("Enter size from 1-3: ", min_value=1)
    size = 3 if size > 3 else size
    meats = input_valid_int("Enter number of meat toppings ", min_value=1)
    veg = input_valid_int("Enter number of non-meat toppings ", min_value=1)
    quantity = input_valid_int("Enter number of these pizzas ", min_value=1)
    return size, meats, veg, quantity

该实现的优势:

  • 单步错误单步重试,用户体验更好
  • 无递归栈溢出风险,稳定性更高
  • 通用逻辑复用,代码更简洁易维护

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 12:06:04