在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异常,指示这是一个错误(如果在空闲状态下运行,则会引发队列。空异常)
哼!容易的。我在看参考资料以备参考,但忘了看加薪。谢谢