我在 Ubuntu 13.10 中运行 python 2.7,idle(idle-python2.7)已停止工作。每当我尝试在编辑器窗口中打开文件时,它都是空白的,尽管该文件确实存在并且不为空/空白。此外,在此之后无法关闭空闲状态,除非通过终端 kill 命令。
- Idle 之前运行良好。这个问题在我安装了一些东西后出现,包括 idlex、各种 scipy 模块和 mpmath,但在尝试了几种方法修复后,发现这似乎是由 Ubuntu 官方的 idle 包引起的。
当我尝试在空闲状态下打开一个文件时,终端出现此错误:
Exception in Tkinter callback
[...lines ommitted for brevity...]
File "/usr/lib/python2.7/idlelib/IOBinding.py", line 129, in coding_spec
for line in lst:
NameError: global name 'lst' is not defined
如果你看一下代码,就会发现它似乎是一个明显的错误:确实lst
在函数中没有定义coding_spec
。此外,源文件 IOBinding.py 中的http://fossies.org/dox/Python-2.7.5/IOBinding_8py_source.html有所不同,并没有显示出问题。
我认为最近的某个软件包以某种方式覆盖了该文件,我尝试了许多方法,包括从 synaptic 重新安装所有 Python 软件包,但错误的 IOBinding.py 仍然存在。我认为问题出在软件包本身,因为我最终验证sudo apt-get remove idle
了空闲库目录是空的,并重新安装sudo apt-get install idle
;但错误的 IOBinding.py 文件又回来了。
事实上,我可以通过简单地在代码中替换 来让空闲状态再次工作lst
,str
但对我来说这显然是不行的。我也不太愿意尝试从源 Python 发行版中替换该文件,因为其他文件可能有误。我想从官方包中获取正确的文件。
答案1
这是一个‘我也是’的问题,没有解决方案。
...直到我搜索到具体的错误。
编辑文件
/usr/lib/python2.7/idlelib/IOBinding.py
并在coding_spec函数中替换此行:
str = str.split("\n", 2)[:2]
和:
lst = str.split("\n", 2)[:2]