【问题标题】:How to raise exception in except block without original traceback in python 3.5+ [duplicate]python 3.5+中如何在没有原始回溯的情况下在除块中引发异常[重复]
【发布时间】:2025-11-23 09:10:01
【问题描述】:

库代码可以引发自定义库异常;我想抓住那个并提出我自己的异常,而不附加原始异常和原始回溯信息:

    try:
        can_raise_custom_lib_exception()
    except custom_lib_exception as e:
        cleanup()
        raise myOwnException("my own extra text")

以这种方式抛出原始异常(带有回溯),消息:

在处理上述异常的过程中,又发生了一个异常:

显示后跟MyOwnException(带有回溯)。

是否可以隐藏原始异常并仅显示我的异常?看起来 python 3.5+ 将回溯信息附加到错误中,我想完全隐藏第一个。

【问题讨论】:

    标签: python python-3.x exception


    【解决方案1】:

    使用raise from None 抑制早期的异常:

    try:
        can_raise_custom_lib_exception()
    except custom_lib_exception as e:
        cleanup()
        raise myOwnException("my own extra text") from None
    

    7.8. The raise statement

    [...]
    通过在 from 子句中指定 None 可以显式抑制异常链接:

    【讨论】: