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

