1

我写了一个测试/模糊库,允许您简单地给它一个测试函数,然后库会生成一个自动测试,以查找什么打破了该函数,以便您可以采取适当的步骤使该函数高度可靠。在Python中引发异常之前,我该如何切分回溯?

heres the link to battle_tested

该项目转向了是成功的,它是做什么我想它真的很有用。我遇到的问题是发现问题时回溯的大小。由于这个库以完全机械化的方式创建测试,所测试的功能会将5或6个级别炸成我的库。这会导致回溯的80%是通过库之前的不同调用,直到它进入测试函数以显示函数中的哪一行爆发。

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

我的问题:有没有办法切追溯所以它只会显示我的图书馆外的台阶前,我提出的例外呢?我真的试图让这个测试库的用户界面友好,对于那些试图使用它的人来说,这个广泛且无法读取的回溯似乎是一个痛点,他们还不知道库底下正在做什么。

感谢您的帮助提前。

回答

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 

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