Python中min/max相关代码的try-except无法捕获错误问题
问题分析与修复方案
问题根源
你的代码输入非数字字符串(比如abcd)时不会触发"Invalid input",反而把它当成最小/最大值,核心原因有两个:
- 没有将用户输入转换为数值类型,直接用字符串做大小比较——字符串之间的比较是Python允许的合法操作,不会抛出异常,所以
except块根本不会执行。 - 整个
try块里没有任何会触发异常的代码,except形同虚设。
修复步骤
- 把输入转为数值:在
try块里先将输入的字符串转换成float(兼容整数和小数),如果输入不是合法数字,这一步会抛出ValueError,触发异常处理。 - 用数值做比较:后续的最小/最大值判断,用转换后的数值而非原字符串。
- 避免内置函数名冲突:别用
min、max当变量名,这俩是Python内置函数,改成current_min、current_max更稳妥。
修复后的完整代码
current_min = None current_max = None while True: line = input('Enter a number: ') try: if line == 'done': break # 转换输入为数值,非法输入时会抛出异常 num = float(line) # 更新最小值 if current_min is None or num < current_min: current_min = num print("min:", current_min) # 更新最大值 if current_max is None or num > current_max: current_max = num print("max:", current_max) except ValueError: # 精准捕获数值转换异常,避免误捕其他错误 print('Invalid input') continue print(current_min, current_max)
内容的提问来源于stack exchange,提问作者sandramsc
相关产品推荐
相关产品推荐

