Windows终端执行py命令启动Python时出现UnicodeDecodeError报错是什么原因
报错原因
这个报错是Windows平台下pyreadline模块读取Python交互式命令历史文件时编码不匹配导致的:
- Python启动交互模式时会自动调用
pyreadline读取用户目录下的.python_history历史记录文件 pyreadline默认调用Windows系统编码(你当前环境为cp1254编码)打开文件,当历史记录中存在该编码无法解析的字符时,就会触发UnicodeDecodeError
解决方案
方案1:删除历史记录文件(快速生效)
直接删除用户目录下的.python_history文件,完整路径为C:\Users\blackbird\.python_history,该文件默认是隐藏属性,需要先开启Windows的隐藏文件可见选项才能找到。删除后重新启动Python即可恢复正常,该操作仅会清除过往的交互命令历史,不影响Python其他功能。
方案2:修改pyreadline源码兼容编码
打开报错提示的历史读取文件:C:\Users\blackbird\AppData\Local\Programs\Python\Python38\lib\site-packages\pyreadline\lineeditor\history.py,找到第82行的代码:
for line in open(filename, 'r'):
修改为:
for line in open(filename, 'r', encoding='utf-8', errors='ignore'):
修改后重启Python即可,后续读取历史文件时会强制使用UTF-8编码,无法解析的异常字符会直接忽略,不会再触发报错。
方案3:卸载pyreadline模块
如果你不需要pyreadline提供的交互式命令增强功能,可以直接执行命令卸载该模块:
pip uninstall pyreadline
卸载后Python交互模式将使用默认的历史读取逻辑,不会再触发该报错。
内容的提问来源于stack exchange,提问作者sekomer
相关产品推荐
相关产品推荐

