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

