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

时间:2017-06-13 13:23:46

标签: python unit-testing exception-handling automated-tests fuzzing

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

heres the link to battle_tested

该项目取得了成功,对我做的事情非常有用。我遇到的问题是发现问题时回溯的大小。由于这个库以完全机械化的方式创建测试,因此测试的函数会将5或6个级别放入我的库中。这导致80%的回溯只是通过库的不同调用,然后才能到达测试函数以显示函数中的哪一行爆炸。

heres a link to a small demo that demonstrates how large the traceback is

我的问题:有没有办法切断回溯,所以它只会在我提出异常之前显示我的库之外的步骤?我真的试图让这个测试库用户友好,而且广泛且难以理解的回溯似乎是尝试使用它的人们的痛点,他们还不知道库正在做什么。< / p>

感谢您的帮助。

1 个答案:

答案 0 :(得分:2)

您可以随时使用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

你仍然需要从那里识别和切片。