为何Python异常信息被打印两次?ValueError问题求助
问题排查:Python ValueError异常信息重复显示的原因
当输入20.5和5时,运行以下代码会出现异常信息重复的情况:
try: user_num = int(input()) div_num = int(input()) print(user_num / div_num) except ValueError as e0: print('Input Exception: invalid literal for int() with base 10:', e0) except ZeroDivisionError: print('Zero Division Exception: integer division or modulo by zero')
实际输出:
Input Exception: invalid literal for int() with base 10: invalid literal for int() with base 10: '20.5'
原因分析
Python抛出的ValueError异常对象(即代码中的e0),其字符串形式本身就已经包含了完整的错误描述:invalid literal for int() with base 10: '20.5'。而你在print语句里手动重复写了invalid literal for int() with base 10:这段内容,两者拼接后就导致了重复显示。
解决办法
有两种常见的修正方式:
直接复用异常对象的完整描述
去掉手动添加的重复前缀,只保留自定义提示加异常对象:try: user_num = int(input()) div_num = int(input()) print(user_num / div_num) except ValueError as e0: print('Input Exception:', e0) except ZeroDivisionError: print('Zero Division Exception: integer division or modulo by zero')输出会变为:
Input Exception: invalid literal for int() with base 10: '20.5'提取异常中的具体错误内容
如果希望保留自定义的前缀格式,可以拆分异常信息,只提取具体的错误值部分:try: user_num = int(input()) div_num = int(input()) print(user_num / div_num) except ValueError as e0: error_detail = str(e0).split(': ')[-1] print(f'Input Exception: invalid literal for int() with base 10: {error_detail}') except ZeroDivisionError: print('Zero Division Exception: integer division or modulo by zero')这样输出也会正常显示,不会重复前缀。
内容的提问来源于stack exchange,提问作者Kevical
相关产品推荐
相关产品推荐

