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

Python新手编写阶乘程序时try/except异常捕获失效求助

问题根因

你当前的异常捕获逻辑失效核心原因如下:

  • Python 3 中input()函数无论接收用户输入什么内容,都只会返回字符串类型,这一步本身不会抛出你捕获的三类异常。所有非法输入对应的异常都是后续执行int(num)类型转换、math.factorial()阶乘计算时抛出的,而这两行代码不在你的try代码块范围内,自然无法被捕获
  • 没有针对负数输入的处理逻辑,math.factorial()接收负数参数时会抛出ValueError,你当前的逻辑没有覆盖这个场景

修复后完整代码

import math
from datetime import datetime

num = 0
start = 0
end = 0
# max value is 2147483647
if __name__ == '__main__':
    try:
        num = input("Enter a number: ")
        # 类型转换移入try块
        num_int = int(num)
        if num_int < 0:
            raise ValueError
        start = datetime.now()
        print("The factorial of ", num_int, " is : ")
        print(math.factorial(num_int))
        end = datetime.now()
        print(f"Time taken in (hh:mm:ss.ms) is {end - start}")
    except OverflowError:
        print("Input cannot exceed 2147483647")
    except ValueError:
        print("Please enter a non-negative whole number")

调整说明

  • 所有可能抛出异常的操作(类型转换、阶乘计算、负数校验)都移入了try块,确保异常能被正常捕获
  • 新增负数校验分支,输入负整数时主动触发ValueError走对应提示逻辑
  • 移除了冗余的未使用time模块导入

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 06:36:05