这个简短的Python脚本debugwin.py在我的Linux机器上运行良好:
>>> import debugwin
>>> l = []
>>> debuwin.watch(l)
0
>>> l.append(1)
但是,people have told me在Windows上(Python 2.7.3 Windows 7)它有时在你追加后不会更新,有时会出现堆栈溢出:
>>> error in background error handler:
out of stack space (infinite loop?) while executing "::tcl::Bgerror {out of stack
space (infinite loop?)} {-code 1 -level 0 -errorcode NONE -errorinfo {out of stack
space (infinite loop?)Unable to format..."
脚本如何溢出?
答案 0 :(得分:3)
如果为报告错误而编写的代码存在错误,它可能会溢出。当它试图报告错误时它调用错误报告代码,但它有一个错误,所以它试图调用错误报告代码,...我不是说这是问题,但这至少是一种方法来获得什么你看到了。
我对您链接的debugwin.py代码崩溃并不特别感到惊讶(至少,我编写此代码时该代码的版本)。 Tkinter不是线程安全的,传统的观点是它应该只在应用程序的主线程中运行。看起来代码在子线程中创建了一个tk解释器。因此,即使错误报告代码中没有错误,tcl解释器在子线程中运行的事实使我认为它可能与线程相关。当然,崩溃似乎是随机的这一事实让我相信它与线程有关。
我看到另一件看起来有点可疑的事情。所有小部件都有update
方法,该方法调用标准的tk update
命令。您有一个继承自Label的小部件,并且您创建了自己的update
方法。这可能不会导致任何问题,但这是代码味道。