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

Python中如何重写类型转换时的自定义异常错误消息?

修改方案

要实现替换非数字输入的错误消息,同时保留负数输入的自定义提示,你可以通过嵌套try-except来区分两种ValueError场景:

while True:
    try:
        age_input = input('How old are you? ')
        # 单独捕获int转换失败的情况,替换错误消息
        try:
            age = int(age_input)
        except ValueError:
            raise ValueError('Not a valid number')
        # 检查年龄是否为负,抛出自定义错误
        if age < 0:
            raise ValueError('negative age')
    except ValueError as ve:
        print(ve)
    except Exception:
        print('Error')
    else:
        break

逻辑说明

  • 第一层try块负责整体流程,第二层嵌套的try专门处理字符串转整数的操作:
    • 如果输入无法转换为整数(比如输入cat),直接抛出自定义的ValueError('Not a valid number')
    • 转换成功后,再判断年龄是否小于0,若成立则抛出negative age的错误
  • 外层的except ValueError统一捕获这两种场景的错误并打印对应的消息
  • 其他未知异常会被通用except Exception捕获并输出Error

另一种不依赖嵌套的实现方式(注意:该方式依赖Python默认错误文本,可能因版本/环境变化失效):

while True:
    try:
        age = int(input('How old are you? '))
        if age < 0:
            raise ValueError('negative age')
    except ValueError as ve:
        err_msg = str(ve)
        if 'invalid literal for int() with base 10' in err_msg:
            print('Not a valid number')
        else:
            print(err_msg)
    except Exception:
        print('Error')
    else:
        break

推荐使用第一种嵌套try-except的方案,逻辑更清晰且不依赖系统默认的错误字符串,兼容性更强。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.07 09:42:42