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

