在不调用原始异常的情况下在Except中引发异常

时间:2015-01-19 15:34:33

标签: python exception nested raise

我的代码如下:

try:
    *Do something*
except *anError*:
    if (condition):
        methodCalled()
    else:
        raise "my own Exception"

问题是,当我提出自己的异常(“我自己的异常”)时,也会引发“anError”异常。有没有办法确保当我提出自己的异常时,我抓到的错误不会被引发?

1 个答案:

答案 0 :(得分:4)

引用docs

  

在except或finally中引发(或重新引发)异常时   子句__context__自动设置为捕获的最后一个异常;   如果新异常未处理最终的回溯   显示将包括原始例外和最终   异常。

这正是你的情况:

try:
    try:
        raise ValueError
    except ValueError:
        raise TypeError
except Exception as e:
    print('Original:', type(e.__context__)) # Original: <class 'ValueError'>
    print('Explicitly raised:', type(e))    # Explicitly raised: <class 'TypeError'>

只有一个活动例外;我可能写了except TypeError而不是except Exception,输出仍然是相同的。

如果您想阻止Python打印原始异常,请使用raise ... from None

try:
    raise ValueError
except ValueError:
    raise TypeError from None