如何在异常回溯中深入获取第二项的文件名?
How to get filename of second item deep in exception traceback?
如果我有这样的回溯:
Traceback (most recent call last):
File "...\overall_input.py", line 5, in setup_data
MODULE1.function_name()
File "...\MODULE1.py", line 5, in function_name
value = 1/0
如何获取第二个文件的名称 deep - 即 MODULE1.py
?
作为参考,我知道我可以通过捕获异常然后使用:
来获取第一个文件(即 overall_input.py
)
exc_type, exc_obj, exc_tb = sys.exc_info()
fname = os.path.split(exc_tb.tb_frame.f_code.co_filename)[1]
如答案中所述Python When I catch an exception, how do I get the type, file, and line number?。
在 exc_tb
上使用 tb_next
进入引发异常的框架后,您需要访问相同的属性:
exc_tb.tb_next.tb_frame.f_code.co_filename
tb_next
是另一个 traceback
对象,它包含与前一个相同的属性;它只是一个链条,您可以一直跟随它,直到达到您需要的水平。
尽管我从未使用过它,但我敢肯定 traceback
module 如果你用它们做一些奇怪的事情,它会非常方便。
如果我有这样的回溯:
Traceback (most recent call last):
File "...\overall_input.py", line 5, in setup_data
MODULE1.function_name()
File "...\MODULE1.py", line 5, in function_name
value = 1/0
如何获取第二个文件的名称 deep - 即 MODULE1.py
?
作为参考,我知道我可以通过捕获异常然后使用:
来获取第一个文件(即overall_input.py
)
exc_type, exc_obj, exc_tb = sys.exc_info()
fname = os.path.split(exc_tb.tb_frame.f_code.co_filename)[1]
如答案中所述Python When I catch an exception, how do I get the type, file, and line number?。
在 exc_tb
上使用 tb_next
进入引发异常的框架后,您需要访问相同的属性:
exc_tb.tb_next.tb_frame.f_code.co_filename
tb_next
是另一个 traceback
对象,它包含与前一个相同的属性;它只是一个链条,您可以一直跟随它,直到达到您需要的水平。
尽管我从未使用过它,但我敢肯定 traceback
module 如果你用它们做一些奇怪的事情,它会非常方便。