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

Python自定义异常程序调试:整数立方字典输出不符问题

问题排查与代码修正

核心问题分析

原代码存在以下几个关键问题,导致输出与预期不符:

  1. 循环终止逻辑错误:try块包裹了整个循环,一旦某个数字触发异常,会直接终止循环,无法处理后续数字,违反了"每个整数都要检查"的需求。
  2. 异常键名不匹配:存入字典的异常键名是NumberTooBig/NumberTooSmall,但预期要求是Number too big/Number too small。
  3. 打印格式错误:异常行的字符串拼接语法错误,无法生成预期的{'Number too big': 34}格式;普通键值对的空格格式也不符合要求。
  4. 多余排序操作:代码对输入数字做了排序,但预期输出是按输入顺序展示结果,排序会打乱原始顺序。

修正后的代码

# 定义自定义异常类
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}")

修正说明

  1. 循环内独立处理异常:将try-except嵌入循环内部,确保每个数字都被检查,单个异常不会中断后续数字的处理。
  2. 分离异常存储:用列表存储异常信息,避免多个异常时字典键被覆盖的问题。
  3. 匹配预期格式:使用f-string生成符合要求的输出格式,修正异常键名与打印样式。
  4. 保留输入顺序:移除排序操作,保持输入数字的原始顺序,与预期输出一致。

测试验证

输入:

3
7
9
22
34

输出:

{'Number too big': 34}
3  :  27
7  :  343
9  :  729
22  :  10648

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.04 21:13:22