繁体   English   中英

如何在python中引发异常之前切片回溯?

[英]How do I slice a traceback before raising an exception in python?

我编写了一个测试/模糊库,使您可以简单地为其提供功能进行测试,然后该库将生成一个自动测试以查找破坏该功能的内容,因此您可以采取适当的步骤使该功能高度可靠。

这是Battle_tested的链接

该项目被证明是成功的,对于完成我想要的事情确实很有用。 我遇到的问题是找到问题时的回溯大小。 由于此库以完全机械化的方式创建测试,因此被测试的功能会将5或6个级别分解到我的库中。 这将导致80%的回溯只不过是通过库的不同调用,然后才到达被测试的函数,以显示函数中的哪一行被炸毁。

这是一个小型演示的链接,该演示演示了回溯有多大

我的问题:是否可以切片回溯,以便在引发异常之前仅显示库外部的步骤? 我实际上是在尝试使此测试库变得用户友好,对于那些尝试使用它但还不知道该库在做什么的人来说,广泛且难以理解的追溯似乎是他们的痛点。

我在这里先向您的帮助表示感谢。

您可以始终使用traceback.format_exc()。splitlines()创建列表:

#!/usr/bin/env python3
import traceback


def thing_that_will_blowup():
    assert False is True


def catch_it_blowup():
    try:
        thing_that_will_blowup()
    except AssertionError:
        exception_data = traceback.format_exc().splitlines()
        for index, line in enumerate(exception_data):
            if 'File' in line and os.path.basename(__file__) in line:
                print("{} - {}".format(index, line))
                print("{} - {}".format(index + 1, exception_data[index + 1]))


if __name__ == "__main__":
    catch_it_blowup()

收益:

1 -   File "split_stacktrace.py", line 11, in check_it_blowup
2 -     thing_that_will_blowup()
3 -   File "split_stacktrace.py", line 6, in thing_that_will_blowup
4 -     assert False is True

您仍然需要从那里进行识别和切片。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM