我的代码如下:
try:
*Do something*
except *anError*:
if (condition):
methodCalled()
else:
raise "my own Exception"
问题是,当我提出自己的异常(“我自己的异常”)时,也会引发“anError”异常。有没有办法确保当我提出自己的异常时,我抓到的错误不会被引发?
答案 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