我启动Python shell时的错误,是我一周前运行的脚本中的错误

时间:2015-03-06 14:21:56

标签: python linux file shell

我一直在学习python,我的一个系统上的Python交互式shell存在问题。它在每个python-interactive-mode start(没有参数)上运行脚本。我不知道在哪里寻找一个这样做的过程,我已经在这个系统上编写了很多小脚本,我可以看到什么脚本乱七八糟,

当我这样做时:

user@Host ~/Python Scripts> python

我明白了:

Python 3.4.2 (default, Feb 21 2015, 22:19:02) 
[GCC 4.9.2 20150212 (Red Hat 4.9.2-6)] on linux
Type "help", "copyright", "credits" or "license" for more information.
# ! / u s r / b i n / e n v   p y t h o n 
 finished
Failed calling sys.__interactivehook__
Traceback (most recent call last):
  File "/usr/local/opt/python-3.4.2/lib/python3.4/site.py", line 396, in register_readline
    import rlcompleter
  File "/usr/local/opt/python-3.4.2/lib/python3.4/rlcompleter.py", line 161, in <module>
    readline.set_completer(Completer().complete)
AttributeError: 'module' object has no attribute 'set_completer'
>>> quit()

这是我运行的文件,并在每个python start上运行:

#!/usr/bin/env python

try:
    number = int(input("Enter a number: "))
    print(number)
    aFile = open('modules.py')
    for i in aFile:
        print(aFile.readline(), end=' ')

except ValueError:
    print('Not a number, please re-enter:')
    number = int(input('Enter a number: '))
    print(number)

except IOError:
    print('Cannot open file')

print('finished')

导致此问题的原因以及如何解决?

编辑#1

系统是Fedora 21,文件modules.py和在交互式shell启动时运行的脚本是从未在Windows系统上编辑过的脚本。

系统尚未重启11天。

这是:

~/Python Scripts> file tryexcept.py
tryexcept.py: Python script, ASCII text executable

编辑#2

我当前的工作目录中有一个readline.py:

~/Python Scripts> ls | grep readline
readline.py

2 个答案:

答案 0 :(得分:4)

rlcompleter.py的最后一部分试图导入readline,然后运行你错误的行。

try:
    import readline
except ImportError:
    pass
else:
    readline.set_completer(Completer().complete)
    # Release references early at shutdown (the readline module's
    # contents are quasi-immortal, and the completer function holds a
    # reference to globals).
    atexit.register(lambda: readline.set_completer(None))

您导入的路径中必须有一个readline.py文件,而不是实际的python模块。如果您没有readline.py,但曾经有过查找readline.pyc文件。

在解释器中放置一个import readline;print(readline.__file__),看看你究竟要导入什么

答案 1 :(得分:2)

我在Fedora 21系统中遇到了同样的问题。在我的情况下发生的是我试图在已删除的文件夹中运行python解释器。

这是因为我导航到一个文件夹,在命令行中输入 Dropbox 。然后,我使用 Files 应用程序删除 Dropbox 文件夹。回到控制台,当前文件夹仍然是 Dropbox

从这个已删除的文件夹运行python会导致同样的错误。