在Python中,如何使用回溯模块查找异常生成的位置?

在Python中,如何使用回溯模块查找异常生成的位置?,python,exception,stack-trace,traceback,Python,Exception,Stack Trace,Traceback,我正在从事一个复杂的自由和开放源码软件项目,该项目利用GTK+3。生成流图并尝试运行它时,会生成以下错误: “页面”对象没有属性“获取流图” 有30个不同的文件具有代码中列出的“object has no attribute…”通用异常,还有4个文件调用函数get\u flow\u graph() 所以我想弄清楚的是,生成特定错误消息的30个文件中的哪一个正在被执行,最好是4个具有该函数的文件中的哪一个首先导致了错误 我试图使用Python的回溯模块来找出异常生成的具体位置。我想我找到了调用最终

我正在从事一个复杂的自由和开放源码软件项目,该项目利用GTK+3。生成流图并尝试运行它时,会生成以下错误:
“页面”对象没有属性“获取流图”

有30个不同的文件具有代码中列出的“object has no attribute…”通用异常,还有4个文件调用函数
get\u flow\u graph()

所以我想弄清楚的是,生成特定错误消息的30个文件中的哪一个正在被执行,最好是4个具有该函数的文件中的哪一个首先导致了错误

我试图使用Python的
回溯
模块来找出异常生成的具体位置。我想我找到了调用最终出错的函数的文件,但我似乎无法让
回溯
模块提供更多

例如,如果我像这样包装函数:

try:
    fg = self.page.get_flow_graph()
except Exception:
    traceback.print_exc()
然后我就

  File "<redacted>", line 66, in _popen
    fg = self.page.get_flow_graph()
AttributeError: 'Page' object has no attribute 'get_flow_graph'
'Page' object has no attribute 'get_proc'
文件“”,第66行,在
fg=self.page.get\u flow\u graph()
AttributeError:“Page”对象没有“get\u flow\u graph”属性
“页面”对象没有属性“get\u proc”

作为输出。因此,我得到了原始异常,但出现了一个新的
get_proc
错误,该错误对我没有帮助,但显然与尝试使用
traceback
有关

也许我没有将跟踪放在正确的文件/位置,或者我要求的太多,但是我应该如何编写它来计算原始
属性错误的实际堆栈跟踪?

使用

except AttributeError as e:
  print(e.__traceback__.tb_lineno)
  print(e.__traceback__.tb_frame)

相反,它能进一步帮助你吗?(真的在问,不是在讽刺)

好主意,但即使加上这些,也没有产生任何效果。我一直得到最初的错误。我可以确认导致错误的文件,但我不知道它为什么没有接收到“Page”实例。我将转到Page类,并将调试打印添加到
get\u flow\u graph()
中,以便将
\u file\uuuuuuu
打印到控制台。@crystalattice异常回溯只会告诉您具体错误的来源。它不会告诉您该错误的根本问题来自何处,例如,为什么
self.page
有一个不具有预期属性的对象。您可能正在寻找一个实际的调试器来跟踪执行,而不仅仅是异常。对@MisterMiyagi,但是,找到触发错误的特定调用有助于放置断点来检查变量。“所以我得到了最初的异常,但一个新的get_proc错误对我没有帮助,但显然与试图使用回溯相关。“你怎么会这样想?您确定问题不在于
self.page
无法提供您认为它的功能,因此使用它以后会导致其他故障吗?您是否知道您的
except
块会抑制异常,导致程序以可能不一致的状态跛行运行?