微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何建立一个指向已保存的python追溯的异常?

如何解决如何建立一个指向已保存的python追溯的异常?

我正在尝试做一些奇怪的事情。我想在Python中保存堆栈跟踪,然后在以后的行中引发异常时,希望该异常具有我之前保存的堆栈跟踪,而不是认的回溯。我想给人一种错觉,那就是错误发生在与实际发生错误不同的行上。

为了更具体一点,我希望能够做类似的事情

class Pipeline:
    
    def __init__(self):
        saved_traceback = None

    def m1(self):
        # ... Do some work ....
        saved_traceback = save_traceback()
    
    def execute(self):
        try:
           # .... Do Some work 
        except Exception as e:
           raise SpecialError(saved_traceback)

然后我将运行一个脚本,如:

foo = Pipeline()
foo.m1()
foo.execute()

我想以这样的方式实现execute:如果在执行过程中出现错误,则回溯指向对m1调用。这是一种惰性管道构建领域特定语言的一部分,在调用execute之前,任何工作都不会发生,因此所有错误消息都将来自execute。相反,我希望用户看到一个错误,该错误指向添加错误管道步骤的方法

解决方法

您可以使用traceback.format_exc()将追溯保存为字符串。

import traceback

try:
    print(a)
except:
    traceback_str = traceback.format_exc()

print(a)将以NameError失败,因为从未定义a。在except块中,最新的回溯将作为字符串保存到traceback_str

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。