You need to enable JavaScript to run this app. Python编程Try/except使用错误排查:数值输入求最大最小值练习题问题
优惠活动
大模型
产品
解决方案
定价
更多

Python编程Try/except使用错误排查:数值输入求最大最小值练习题问题

原代码存在的错误点
  • 函数名拼写不规范:将通用入口函数main误写为maim,虽然不影响当前脚本的调用逻辑,但不符合行业通用代码规范。
  • 异常捕获位置错误:原代码在进入try块之前就执行了num = float(num)的类型转换,当用户输入像bob这类非数字内容时,转换阶段就会直接抛出ValueError,根本不会进入预设的异常捕获分支,完全达不到“捕获无效输入”的要求。
  • 大小比较的分支逻辑错误:使用if-elif结构判断最大值、最小值,当输入的数字满足“大于当前最大值”的条件时,程序不会再继续判断该数字是否小于当前最小值,会导致最小值更新逻辑失效。
  • 初始值的比较逻辑错误:largest和smallest初始值为None时,直接和数字做大小比较会触发TypeError,这类系统错误会被宽泛的except语句捕获,被误判为无效数字输入。
  • 冗余输出逻辑:print(num)语句放在循环内,会在每次输入后额外打印数字内容,打乱作业要求的输出格式。
  • 异常捕获范围过宽:没有指定捕获ValueError类型,会把代码本身逻辑错误触发的异常也当成“用户输入无效”处理,大幅提升排查问题的难度。
  • 类型转换不符合作业要求:题目要求处理整数输入,原代码使用float()做类型转换,和题目要求的整数处理逻辑不匹配。
修正后的可运行代码
def main():
    largest = None
    smallest = None
    while True:
        user_input = input("Enter a number: ")
        if user_input == "done":
            break
        try:
            # 将类型转换放入try块,无效输入直接触发异常
            num = int(user_input)
            # 第一次输入有效数字时,直接初始化最大、最小值
            if largest is None:
                largest = num
                smallest = num
            else:
                # 使用两个独立if判断,避免elif分支漏判
                if num > largest:
                    largest = num
                if num < smallest:
                    smallest = num
        except ValueError:
            print("Invalid number")

    print("Maximum", largest)
    print("Minimum", smallest)

main()
测试用例匹配效果

当依次输入7、2、bob、10、4、done时,程序输出完全符合题目要求:

Invalid number
Maximum 10
Minimum 2

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.25 12:36:02