Pythons控制台模块使无法键入Tab键

时间:2018-07-09 17:13:49

标签: python debugging

不久前,我开始在自己的程序中使用它。从那时起,每当我在运行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解释器中。在正在运行的程序或其他内容中键入选项卡不会造成任何问题。

5 个答案:

答案 0 :(得分:4)

经过测试的Windows 10解决方案?‍?

  • ?复制上一个追溯文件路径C:\SP_CI_PROGRAMS\Languages\Python\3.6.1\Lib\rlcompleter.py
  • 使用任何文本编辑器打开它?
    • 如果VsCode使用cmd并复制此?
    • 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])