不久前,我开始在自己的程序中使用它。从那时起,每当我在运行python的控制台(cmd.exe实例)上键入tab键时,都会收到readline内部错误。完整的追溯如下(请注意,我没有在此上下文中导入cmd模块,甚至没有使用它导入脚本。我只是启动了python,按下了tab并声明了一个例外):
<pre>
Traceback (most recent call last):
File "C:\SP_CI_PROGRAMS\Languages\Python\3.6.1\lib\site-packages\pyreadline\console\console.py", line 768, in hook_wrapper_23
res = ensure_str(readline_hook(prompt))
File "C:\SP_CI_PROGRAMS\Languages\Python\3.6.1\lib\site-packages\pyreadline\rlmain.py", line 571, in readline
self._readline_from_keyboard()
File "C:\SP_CI_PROGRAMS\Languages\Python\3.6.1\lib\site-packages\pyreadline\rlmain.py", line 536, in _readline_from_keyboard
if self._readline_from_keyboard_poll():
File "C:\SP_CI_PROGRAMS\Languages\Python\3.6.1\lib\site-packages\pyreadline\rlmain.py", line 556, in _readline_from_keyboard_poll
result = self.mode.process_keyevent(event.keyinfo)
File "C:\SP_CI_PROGRAMS\Languages\Python\3.6.1\lib\site-packages\pyreadline\modes\emacs.py", line 243, in process_keyevent
r = self.process_keyevent_queue[-1](keyinfo)
File "C:\SP_CI_PROGRAMS\Languages\Python\3.6.1\lib\site-packages\pyreadline\modes\emacs.py", line 286, in _process_keyevent
r = dispatch_func(keyinfo)
File "C:\SP_CI_PROGRAMS\Languages\Python\3.6.1\lib\site-packages\pyreadline\modes\basemode.py", line 257, in complete
completions = self._get_completions()
File "C:\SP_CI_PROGRAMS\Languages\Python\3.6.1\lib\site-packages\pyreadline\modes\basemode.py", line 200, in _get_completions
r = self.completer(ensure_unicode(text), i)
File "C:\SP_CI_PROGRAMS\Languages\Python\3.6.1\Lib\rlcompleter.py", line 80, in complete
readline.redisplay()
AttributeError: module 'readline' has no attribute 'redisplay'
</pre>
在询问之前,我将python安装到目录“ C:\ SP_CI_PROGRAMS \ Languages \ Python \ 3.6.1”。可从path变量访问它。同样,我设计的任何脚本(放置在目录中)也可以从path变量访问(包括使用cmd模块的python脚本)。
这似乎不是一个紧迫的问题,尤其是看到我只能键入4个空格,但是使用制表符已经成为我特别习惯的事情,其次我键入了制表符,这是我写的任何内容打印回溯时,先前的块会立即丢失。请,有人可以告诉我如何解决此问题。
编辑:这仅在python解释器中。在正在运行的程序或其他内容中键入选项卡不会造成任何问题。
答案 0 :(得分:4)
经过测试的Windows 10解决方案??
C:\SP_CI_PROGRAMS\Languages\Python\3.6.1\Lib\rlcompleter.py
code C:\SP_CI_PROGRAMS\Languages\Python\3.6.1\Lib\rlcompleter.py
line 80
79
开始),它将起作用?...
if _readline_available: ## The old one is ##
readline.insert_text('\t') # if _readline_available:
if hasattr(readline, 'redisplay'): # readline.insert_text('\t')
readline.redisplay() # readline.redisplay()
return '' # return ''
...
⚠不要忘记重新启动python终端
答案 1 :(得分:2)
使用pyreadline停止。被遗弃了您看到的是一个known issue,但是除非有人接手pyreadline开发,否则不可能修复它。
答案 2 :(得分:1)
在Github上看到的Windows计算机似乎仍然是一个持续的问题。一种解决方法似乎是卸载pyreadline
软件包。
答案 3 :(得分:0)
pip uninstall pyreadline
来卸载 pyreadline。我遇到了同样的问题,但是在卸载pyreadline之后,Tab
密钥对我有用。
注意:要查看已安装的软件包,请在命令提示符下键入pip list
。
答案 4 :(得分:0)
好吧,如果您没有机器的权限。您将无法执行这些卸载解决方案。
所以设置completer
函数。它将解决问题,并且不会有奇怪的行为。但是自动完成将不再起作用。如果您希望它起作用,请查看 documentation 并实施它。
readline.set_completer(lambda t, s: [None][s])