重启主模块后Python模块未更新

2 投票
2 回答
4122 浏览
提问于 2025-04-15 22:19

我最近回到一个项目上,之前因为一些原因停了大约六个月。在重新安装了操作系统后,我发现出现了各种奇怪的问题。我确保安装了之前使用的相同版本(2.6)的Python。

一开始,我遇到了一个奇怪的tkinter错误,这个错误之前从未出现过。这个程序相对简单,之前我离开时只剩下两三个小bug,我已经记录下来了,而且这些bug和界面没有关系。

事情变得更加奇怪的是,即使我删除了出问题的代码,错误依然会出现。实际上,错误信息指向的那一行代码在我引用的模块中根本不存在,比如说错误提示是第262行,但那个模块只有200行。

我最终创建了一个全新的主模块文件,并把代码复制粘贴过去,程序才终于识别出出问题的代码已经不存在了,错误也不再出现了。可当我在另一个模块中更新代码后,重新通过命令行启动程序时,这些更新却没有显示出来。(我没有忘记保存。)在折腾了一阵子后,之前的界面错误又回来了,只不过这次是在之前正常工作的另一段代码中。

实际上,如果我回到六个月前的文件,程序是可以正常工作的。但是一旦我在主模块中做了任何更改,界面bug又会出现。

这是原始的错误信息:

Exception in Tkinter callback
Traceback (most recent call last):
  File "C:\Python26\lib\lib-tk\Tkinter.py", line 1410, in __call__
return self.func(*args)
  File "C:\PyStuff\interface.py", line 202, in dispOne
__main__.top.destroy()
  File "C:\Python26\lib\lib-tk\Tkinter.py", line 1938, in destroy
    self.tk.call('destroy', self._w)
TclError: can't invoke "destroy" command:  application has been destroyed

我猜这里发生的事情可能不仅仅是我编程水平不够好。有没有人有想法?

补充:回想起来,我记得看到过关于通过IDLE的命令行运行Tkinter程序不是个好主意的说法。至少看起来,如果我直接双击.pyc文件启动主模块,TclError就消失了。也许我的问题只是这些因素的组合,加上Chris Atlee和Vlad提到的时间戳/PYTHONPATH问题?

2 个回答

0

检查一下你的PYTHON_PATH变量,可能里面有个旧版本的文件。

另外,启动你的Python解释器,然后输入以下命令来查看路径:

import sys
print sys.path

仔细看看输出的结果,确保里面没有什么旧的文件夹。

2

我也遇到过类似的情况。我的问题是因为我使用的版本控制软件(hg)把文件的日期设置成了过去的某个时间。这样一来,Python就选择使用那些时间戳更新的旧的 .pyc 文件了。

解决办法就是在测试代码之前,把所有的 .pyc 文件都删除掉。

撰写回答