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

Python递归函数中try-except的异常行为疑难问题

问题分析与修复

问题根源

你遇到的问题核心是递归调用未返回结果。当第一次输入无效值(如q)触发except块时,你递归调用了get_quantity_input(something),但没有将这个递归调用的返回值传递回上层函数。因此,当递归层级的函数返回有效值(如3)时,它仅仅回到了最初调用的函数上下文,而最初的num_of_something仍保持初始值-69,最终返回的就是这个默认值。

从你提供的输出日志也能验证这点:

  • 递归层级的函数执行完后打印before return 3并返回3,但这个值没有被上层函数接收
  • 上层函数继续执行,打印before return -69并返回-69

修复方案

方案1:修正递归调用的返回逻辑

修改get_quantity_input函数,在except块中返回递归调用的结果:

def get_quantity_input(something):
    num_of_something = -69
    try:
        num_of_something = int(input(something))
        print('inside try', num_of_something)
    except ValueError:
        print('Invalid input, please enter a number.')
        # 返回递归调用的结果,将有效值传递回上层
        return get_quantity_input(something)
    print('before return', num_of_something)
    return num_of_something

方案2:用循环替代递归(更推荐)

递归方式存在栈溢出风险(用户多次输入无效值时),改用循环实现输入验证更健壮:

def get_quantity_input(something):
    while True:
        try:
            num_of_something = int(input(something))
            print('inside try', num_of_something)
            print('before return', num_of_something)
            return num_of_something
        except ValueError:
            print('Invalid input, please enter a number.')

验证效果

修改后,当你先输入无效值再输入有效值时,函数会正确返回你输入的有效整数,而非默认的-69。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.25 19:36:18