[英]How do I slice a traceback before raising an exception in python?
我编写了一个测试/模糊库,使您可以简单地为其提供功能进行测试,然后该库将生成一个自动测试以查找破坏该功能的内容,因此您可以采取适当的步骤使该功能高度可靠。
该项目被证明是成功的,对于完成我想要的事情确实很有用。 我遇到的问题是找到问题时的回溯大小。 由于此库以完全机械化的方式创建测试,因此被测试的功能会将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.