在Python中,如何在维护原始调用堆栈的同时检查并重新引发异常?

在Python中,如何在维护原始调用堆栈的同时检查并重新引发异常?,python,exception-handling,callstack,Python,Exception Handling,Callstack,我遇到了这样一种情况:捕获特定的异常类型,检查异常的消息以检查它是否确实是我要捕获的异常,如果不是,则重新引发异常: try: # do something exception-prone except FooException as e: if e.message == 'Something I want to handle': # handle the exception else: raise e 这很好,但有一个问题。在我重新引发

我遇到了这样一种情况:捕获特定的异常类型,检查异常的消息以检查它是否确实是我要捕获的异常,如果不是,则重新引发异常:

try:
    # do something exception-prone
except FooException as e:
    if e.message == 'Something I want to handle':
        # handle the exception
    else:
        raise e
这很好,但有一个问题。在我重新引发异常的情况下,该异常现在发生在我重新引发异常的行(即
raisee
),而不是异常最初发生的位置。这对于调试并不理想,因为您希望知道原始异常发生的位置

因此,我的问题是:在捕获异常后,在保持原始异常位置的同时,是否有任何方法重新引发或以其他方式“传递”异常

注意:如果您想知道实际情况是什么:我正在使用
动态导入一些模块。我正在捕获
importorror
,以优雅地处理这些模块都不存在的情况。但是,如果这些模块中的任何一个本身包含一个引发
importorror
的import语句,我希望这些“真实”(从我的应用程序的角度)异常被引发——并且就调试工具而言,在原始位置被引发。

只需执行以下操作:

raise
而不是
升起e
。请参见上的教程部分,以及:

如果不存在表达式,raise将重新引发当前作用域中活动的最后一个异常。如果当前作用域中没有活动异常,则会引发TypeError异常,指示这是一个错误(如果在空闲状态下运行,则会引发队列。空异常)


哼!容易的。我在看参考资料以备参考,但忘了看加薪。谢谢