【问题标题】:Anaconda unicode error on command line startup on WindowsWindows 上命令行启动时出现 Anaconda unicode 错误
【发布时间】:2018-08-28 04:03:11
【问题描述】:

在 Windows 10 上从命令行运行 python 时出现此错误:

C:\Users\windows> python
Python 3.6.5 |Anaconda, Inc.| (default, Mar 29 2018, 13:32:41) [MSC v.1900 64 bit (AMD64)] on win32
Type "help", "copyright", "credits" or "license" for more information.
Failed calling sys.__interactivehook__
Traceback (most recent call last):
  File "C:\ProgramData\Anaconda3\lib\site.py", line 410, in register_readline
    readline.read_history_file(history)
  File "C:\ProgramData\Anaconda3\lib\site-packages\pyreadline\rlmain.py", line 165, in read_history_file
    self.mode._history.read_history_file(filename)
  File "C:\ProgramData\Anaconda3\lib\site-packages\pyreadline\lineeditor\history.py", line 82, in read_history_file
    for line in open(filename, 'r'):
  File "C:\ProgramData\Anaconda3\lib\encodings\cp1252.py", line 23, in decode
    return codecs.charmap_decode(input,self.errors,decoding_table)[0]
UnicodeDecodeError: 'charmap' codec can't decode byte 0x81 in position 991: character maps to <undefined>

我没有对我的 python 环境进行任何更改,我只是在运行一些我上周一直在处理的脚本。老实说,我不知道这可能来自哪里;当 python 读取其历史时,这似乎是一个问题。更新 python 和 conda 什么也没做。我在一个中文网站here上发现了一个非常相似的问题,但是解决方法没有帮助。

目前,在继续运行 python 或我的脚本时,我找不到任何问题,但我不希望这回来咬我。任何帮助表示赞赏!

【问题讨论】:

  • 您有一个历史文件,其中包含无法解码的字符。删除历史文件(POSIX:~/.python_history,在 Windows 上可能是 %userprofile%/.python_history)并查看该问题是否消失。
  • 带走历史文件可以吗?我对python的幕后了解不多
  • 是的,这就是用户在之前会话中输入到交互式控制台的任何内容。

标签: python python-3.x


【解决方案1】:

作为用户metatoastercommented,python 历史文件包含系统默认编码无法解码的字节,可能会被删除。如果文件包含您想要保留或查看的命令,您可以先备份并尝试在文本编辑器中查看其内容。

您有一个历史文件,其中包含无法解码的字符。删除历史文件(POSIX:~/.python_history,在 Windows 上可能是 %userprofile%/.python_history)并查看该问题是否消失。

【讨论】:

    【解决方案2】:

    在“history.py”文件中,尝试将“for line in open(filename, 'r'):”更改为“for line in open(filename, 'r', encoding='utf-8'): "

    【讨论】:

    • 与现有答案相比,我认为这不会增加任何内容。最好按照其他人的建议删除历史文件
    • 首先,不建议编辑模块源文件。此外,不久前已经接受了一个答案,而您的答案没有添加任何内容。最重要的是,“尝试做...”不是一个有效的答案。
    • 我支持这个答案,我有话要对其他评论者和反对者说。 1)严格来说,接受的答案只是消除了问题的原因;它本身并不能解决问题。简单地删除历史文件是粗略的,因为某些用户可能需要它。虽然制作副本是可行的,但最好的解决方案是保留文件,同时让 python 解释器愉快地处理文件中的 Unicode 字符...
    • 2) 与公认的答案相比,这个答案直接和中肯地解决了问题,所以我认为这不仅是一个可以接受的答案,也是一个应该有的正确答案被接受,这显然为现有答案增加了一些东西。 ...
    • 3) 源模块不断被开发者改变,为什么其他用户不能? Python 来源不是圣经或国家宪法。更改源的目的是修复错误并添加新功能。 encoding='utf-8' 的添加成功实现了这个目标,那我们为什么不能编辑呢? ...
    猜你喜欢
    • 2020-07-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-09-07
    • 2012-04-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多