Pythons 控制台模块使得无法输入 tab 键

Moh*_*ale 7 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>
Run Code Online (Sandbox Code Playgroud)

在你问之前,我将 python 安装到目录“C:\SP_CI_PROGRAMS\Languages\Python\3.6.1”。它可以从路径变量访问。此外,我设计的放置在目录中的任何脚本也可以从路径变量访问(包括使用 cmd 模块进行 python 的脚本)。

这似乎不是一个紧迫的问题,尤其是看到我只能输入 4 个空格,但是使用制表符是我特别习惯的东西,第二次我输入制表键,我在前一个块中写的任何内容打印回溯时立即丢失。拜托,有人可以告诉我如何解决这个问题。

编辑:这仅在 python 解释器中。在正在运行的程序或其他东西中键入选项卡不会造成任何问题。

Yed*_*rab 10

经过测试的 Windows 10 解决方案(2020 年 1 月 17 日)

  • 复制最后一个回溯文件路径 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 ##
    if hasattr(readline, 'redisplay'):   # if _readline_available:
        readline.insert_text('\t')       #     readline.insert_text('\t')
        readline.redisplay()             #     readline.redisplay()
    return ''                            # return ''
...
Run Code Online (Sandbox Code Playgroud)

不要忘记重新启动您的python终端

  • 我喜欢这个编辑历史。 (5认同)

use*_*ica 5

停止使用 pyreadline。它已经被遗弃了。您所看到的是一个已知问题,但除非有人接管 pyreadline 开发,否则它不太可能得到修复。

  • 我没有使用它,这只是发生了 (3认同)

Sha*_*kes 5

Github 上看到的 Windows 机器似乎是一个持续存在的问题。解决方法似乎是卸载pyreadline软件包。

  • 如何卸载/禁用 pyreadline?我在 Windows / Python 3.7 上遇到了与 OP 相同的问题,pyreadline==2.1,但是“pip uninstall pyreadline”导致“无法卸载 'pyreadline'”。这是一个 distutils 安装的项目,因此我们无法准确确定哪些文件属于它,这只会导致部分卸载。`这对我来说也不起作用:/sf/ask/3588310911/ -安装-pyreadline-使用-pip-on-windows (3认同)