如何在异常回溯中深入获取第二项的文件名?

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 如果你用它们做一些奇怪的事情,它会非常方便。