2

我的代码如下:

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

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

4

1 回答 1

4

引用文档

当在 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
于 2015-01-19T15:42:00.423 回答