在Python,我怎么检查,然后在保持原有调用堆栈重新抛出异常?(In Python, how do

2019-06-27 15:28发布

我有哪里我赶上一个特定的异常类型,检查异常的消息,以检查它实际上是一个例外,我要赶,然后再提高异常,如果没有一种情况:

try:
    # do something exception-prone
except FooException as e:
    if e.message == 'Something I want to handle':
        # handle the exception
    else:
        raise e

这工作得很好,有一个问题。 在我的情况下重新抛出异常,该异常现在发生在我行再次提出它(即raise e ),而不是在原来的位置发生异常。 这是不理想的调试,要知道原始异常发生的地点。

因此,我的问题:有没有什么办法来重新加注或以其他方式“转嫁”的异常捕获它在保持原有的异常位置后?

注意:如果你想知道实际情况是什么:我使用的是动态导入一些模块__import__ 。 我赶上ImportError优雅地与任何模块中不存在的情况下处理。 然而,在这些模块本身包含一些能提高导入语句的情况下ImportError ,我希望这些“真实”(但从我的应用程序的点)异常被提出-在原来的位置,只要调试工具有关。

Answer 1:

做就是了:

raise

而不是raise e 。 参见教程部分引发异常 ,也是对语言参考raise语句 :

如果没有表情都存在,提高再提高的最后一个例外是,在目前的范围是积极的。 如果没有例外的是在当前范围内活性,TypeError异常升高,表明这是一个错误(如果IDLE下运行,一个Queue.Empty异常改为引发)。



文章来源: In Python, how do I inspect and then re-raise an exception while maintaining the original call stack?