在终端启动Python时报错的解决方案


Posted in Python onNovember 20, 2020

最近,在终端启动Python时,报了一个错误:

Failed calling sys.__interactivehook__
Traceback (most recent call last):
 File "d:\ProgramData\Anaconda3\lib\site.py", line 439, in register_readline
  readline.read_history_file(history)
 File "d:\ProgramData\Anaconda3\lib\site-packages\pyreadline\rlmain.py", line 165, in read_history_file
  self.mode._history.read_history_file(filename)
 File "d:\ProgramData\Anaconda3\lib\site-packages\pyreadline\lineeditor\history.py", line 82, in read_history_file
  for line in open(filename, 'r'):
UnicodeDecodeError: 'gbk' codec can't decode byte 0xa7 in position 2167: illegal multibyte sequence

原因是Python的终端历史文件中包含中文,但不能正确使用gbk解码。查看了Python历史文件(系统用户目录下的.python_history),其编码方式为“utf-8”,而”history.py”中读取历史文件时使用的编码方式为“gbk”,所以会报错。 

解决方法

在history.py中使用`for line in open(filename, 'r')`来打开文件并读取每一行,使用的是默认的编码方式。需要根据不同文件的编码方式传入相应的参数值。

1. 首先检测出要打开的文件的编码方式。

在类中定义一个私有方法_get_encoding,作用是检测文件的编码方式,并返回。(需要导入chardet包)

def _get_encoding(self, filename=None):
  	if filename is None:
  		return

  	with open(filename, 'rb') as f:
  		return chardet.detect(f.read())['encoding']

2. 修改历史文件内容的读取

encoding = self._get_encoding(filename)
      
for line in open(filename, 'r', encoding=encoding):
self.add_history(lineobj.ReadLineTextBuff(ensure_unicode(line.rstrip())))

以上就是在终端启动Python时报错的解决方案的详细内容,更多关于终端启动python报错的资料请关注三水点靠木其它相关文章!

Python 相关文章推荐
跟老齐学Python之玩转字符串(1)
Sep 14 Python
使用Python的Zato发送AMQP消息的教程
Apr 16 Python
Python存取XML的常见方法实例分析
Mar 21 Python
Python学习之Django的管理界面代码示例
Feb 10 Python
Python利用正则表达式实现计算器算法思路解析
Apr 25 Python
Python求解任意闭区间的所有素数
Jun 10 Python
Pytorch反向求导更新网络参数的方法
Aug 17 Python
python爬虫爬取笔趣网小说网站过程图解
Nov 18 Python
在django中form的label和verbose name的区别说明
May 20 Python
通过实例简单了解Python sys.argv[]使用方法
Aug 04 Python
Python try except else使用详解
Jan 12 Python
pytorch Dropout过拟合的操作
May 27 Python
python 批量下载bilibili视频的gui程序
Nov 20 #Python
Python ellipsis 的用法详解
Nov 20 #Python
python 动态渲染 mysql 配置文件的示例
Nov 20 #Python
Python paramiko使用方法代码汇总
Nov 20 #Python
分享一枚pycharm激活码适用所有pycharm版本我的pycharm2020.2.3激活成功
Nov 20 #Python
python使用requests库爬取拉勾网招聘信息的实现
Nov 20 #Python
python爬取天气数据的实例详解
Nov 20 #Python
You might like
PHP中将数组转成XML格式的实现代码
2011/08/08 PHP
laravel5.6框架操作数据curd写法(查询构建器)实例分析
2020/01/26 PHP
php 的多进程操作实践案例分析
2020/02/28 PHP
js 学习笔记(三)
2009/12/29 Javascript
解决IE下select标签innerHTML插入option的BUG(兼容IE,FF,Opera,Chrome,Safari)
2010/05/13 Javascript
AngularJS表单基本操作
2017/01/09 Javascript
详解vue之页面缓存问题(基于2.0)
2017/01/10 Javascript
ES6新特性四:变量的解构赋值实例
2017/04/21 Javascript
详解如何去除vue项目中的#——History模式
2017/10/13 Javascript
深入理解 webpack 文件打包机制(小结)
2018/01/08 Javascript
Vue用v-for给src属性赋值的方法
2018/03/03 Javascript
JavaScript继承定义与用法实践分析
2018/05/28 Javascript
搭建vue开发环境
2018/07/19 Javascript
解决vue-cli 打包后自定义动画未执行的问题
2019/11/12 Javascript
微信小程序调用wx.getImageInfo遇到的坑解决
2020/05/31 Javascript
关于better-scroll插件的无法滑动bug(2021通过插件解决)
2021/03/01 Javascript
Python实例分享:快速查找出被挂马的文件
2014/06/08 Python
python实现的正则表达式功能入门教程【经典】
2017/06/05 Python
python3.6+django2.0开发一套学员管理系统
2018/03/03 Python
查看Django和flask版本的方法
2018/05/14 Python
Python 变量类型详解
2018/10/10 Python
关于pytorch多GPU训练实例与性能对比分析
2019/08/19 Python
python3.7环境下安装Anaconda的教程图解
2019/09/10 Python
Python分析微信好友性别比例和省份城市分布比例的方法示例【基于itchat模块】
2020/05/29 Python
Python OpenCV读取中文路径图像的方法
2020/07/02 Python
selenium+python自动化78-autoit参数化与批量上传功能的实现
2021/03/04 Python
使用css实现android系统的loading加载动画
2019/07/25 HTML / CSS
一道输出判断型Java面试题
2014/10/01 面试题
好的自荐信包括什么内容
2013/11/07 职场文书
大学生职业生涯规划书范文
2014/01/04 职场文书
根叔历年演讲稿
2014/05/20 职场文书
支行行长岗位职责
2015/02/15 职场文书
2015年驾驶员工作总结
2015/04/29 职场文书
新年祝酒词大全
2015/08/11 职场文书
2019开业庆典剪彩仪式主持词!
2019/07/22 职场文书
PHP 对接美团大众点评团购券(门票)的开发步骤
2021/04/03 PHP