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

为何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:这段内容,两者拼接后就导致了重复显示。

解决办法

有两种常见的修正方式:

  1. 直接复用异常对象的完整描述
    去掉手动添加的重复前缀,只保留自定义提示加异常对象:

    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'
    
  2. 提取异常中的具体错误内容
    如果希望保留自定义的前缀格式,可以拆分异常信息,只提取具体的错误值部分:

    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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.26 13:50:00