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

Python用try/except写斐波那契数列输入负数导致内核停止如何解决

问题原因

  • 你当前代码的try块仅覆盖了n==0/n==1/n==2的判断逻辑,当输入负数时,不会触发该分支的任何异常,会直接执行最后的递归语句fibonacci(n-1) + fibonacci(n-2)。负数递归会无限向下调用(n从-1变成-2、-3……永远不会触底返回),最终导致栈溢出内核崩溃。
  • 负数本身是合法的int类型值,int(input())输入负数时不会抛出ValueError,只有输入非数字类字符串时才会触发该异常,你设置的异常捕获逻辑完全没有覆盖到负数输入的场景。

修复方案

你可以在函数入口主动判断n是否为负数,主动抛出异常并捕获处理,符合try/except使用要求的修改后代码如下:

def fibonacci(n):
    try:
        # 主动校验负数并抛出异常
        if n < 0:
            raise ValueError("Input must be non-negative")
        if n == 0:
            return 0
        elif n == 1 or n == 2:
            return 1
        return fibonacci(n-1) + fibonacci(n-2)
    except ValueError as e:
        print(e)
        # 异常后返回空值避免后续逻辑报错
        return None

# 额外捕获输入非整数的异常
try:
    n = int(input("Enter the value of n: "))
    res = fibonacci(n)
    if res is not None:
        print(res)
except ValueError:
    print("Input must be a valid integer")

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 01:15:02