Python自定义异常程序调试:整数立方字典输出不符问题
问题排查与代码修正
核心问题分析
原代码存在以下几个关键问题,导致输出与预期不符:
- 循环终止逻辑错误:
try块包裹了整个循环,一旦某个数字触发异常,会直接终止循环,无法处理后续数字,违反了"每个整数都要检查"的需求。 - 异常键名不匹配:存入字典的异常键名是
NumberTooBig/NumberTooSmall,但预期要求是Number too big/Number too small。 - 打印格式错误:异常行的字符串拼接语法错误,无法生成预期的
{'Number too big': 34}格式;普通键值对的空格格式也不符合要求。 - 多余排序操作:代码对输入数字做了排序,但预期输出是按输入顺序展示结果,排序会打乱原始顺序。
修正后的代码
# 定义自定义异常类 class NumberTooSmall(Exception): def __init__(self, num): self.num = num class NumberTooBig(Exception): def __init__(self, num): self.num = num # 接收5个整数,保留输入顺序 nums = [int(input()) for _ in range(5)] result_dict = {} exceptions_list = [] # 逐个处理每个数字 for num in nums: try: if num < 3: raise NumberTooSmall(num) elif num > 30: raise NumberTooBig(num) else: result_dict[num] = num ** 3 except NumberTooSmall as e: exceptions_list.append(('Number too small', e.num)) except NumberTooBig as e: exceptions_list.append(('Number too big', e.num)) # 打印异常信息 for err_type, err_num in exceptions_list: print(f"{{'{err_type}': {err_num}}}") # 打印正常的整数与立方值 for key, value in result_dict.items(): print(f"{key} : {value}")
修正说明
- 循环内独立处理异常:将
try-except嵌入循环内部,确保每个数字都被检查,单个异常不会中断后续数字的处理。 - 分离异常存储:用列表存储异常信息,避免多个异常时字典键被覆盖的问题。
- 匹配预期格式:使用f-string生成符合要求的输出格式,修正异常键名与打印样式。
- 保留输入顺序:移除排序操作,保持输入数字的原始顺序,与预期输出一致。
测试验证
输入:
3 7 9 22 34
输出:
{'Number too big': 34} 3 : 27 7 : 343 9 : 729 22 : 10648
内容的提问来源于stack exchange,提问作者Deepak284090
相关产品推荐
相关产品推荐

