【问题标题】:How do I slice a traceback before raising an exception in python?如何在 python 中引发异常之前对回溯进行切片?
【发布时间】:2017-06-13 13:23:46
【问题描述】:

我编写了一个测试/模糊测试库,它允许您简单地为其提供一个测试函数,然后该库将生成一个自动测试以找出破坏该函数的原因,以便您可以采取适当的步骤使该函数高度可靠.

heres the link to battle_tested

这个项目结果证明是成功的,它对于做我想做的事情非常有用。我遇到的问题是发现问题时回溯的大小。由于该库以完全机械化的方式创建测试,因此测试的函数将在我的库中炸毁 5 或 6 个级别。这导致 80% 的回溯只是通过库的不同调用,然后才到达被测函数以显示函数中的哪一行发生故障。

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

我的问题:有没有办法分割回溯,所以它只会在我引发异常之前显示我的库之外的步骤?我真的在努力让这个测试库对用户友好,对于那些尝试使用它但还不知道该库到底在做什么的人来说,广泛且难以理解的回溯似乎是他们的痛点。

提前感谢您的帮助。

【问题讨论】:

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


    【解决方案1】:

    你总是可以使用 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
    

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

    【讨论】:

      猜你喜欢
      • 2010-12-08
      • 2014-09-09
      • 1970-01-01
      • 2021-12-26
      • 1970-01-01
      • 1970-01-01
      • 2014-09-11
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多