在终端启动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获取脚本所在目录的正确方法
Apr 15 Python
实例说明Python中比较运算符的使用
May 13 Python
Python栈算法的实现与简单应用示例
Nov 01 Python
python将.ppm格式图片转换成.jpg格式文件的方法
Oct 27 Python
ubuntu 16.04下python版本切换的方法
Jun 14 Python
Django 过滤器汇总及自定义过滤器使用详解
Jul 19 Python
python实现对图片进行旋转,放缩,裁剪的功能
Aug 07 Python
Python partial函数原理及用法解析
Dec 11 Python
如何在django中运行scrapy框架
Apr 22 Python
python numpy库np.percentile用法说明
Jun 08 Python
据Python爬虫不靠谱预测可知今年双十一销售额将超过6000亿元
Nov 11 Python
Python实现提取PDF简历信息并存入Excel
Apr 02 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
ThinkPHP中url隐藏入口文件后接收alipay传值的方法
2014/12/09 PHP
一个简单的js树形菜单
2011/12/09 Javascript
图片翻转效果具体实现代码
2014/01/09 Javascript
Js实现网页键盘控制翻页的方法
2014/10/30 Javascript
javascript使用appendChild追加节点实例
2015/01/12 Javascript
javascript中call和apply的用法示例分析
2015/04/02 Javascript
JavaScript实现MIPS乘法模拟的方法
2015/04/17 Javascript
javascript控制层显示或隐藏的方法
2015/07/22 Javascript
基于jQuery实现的双11天猫拆红包抽奖效果
2015/12/01 Javascript
基于JavaScript实现网页倒计时自动跳转代码
2015/12/28 Javascript
浅谈js中几种实用的跨域方法原理详解
2016/12/02 Javascript
Vue.js实战之使用Vuex + axios发送请求详解
2017/04/04 Javascript
vue.js默认路由不加载linkActiveClass问题的解决方法
2017/12/11 Javascript
js实现上传并压缩图片效果
2018/01/10 Javascript
原生JS实现列表子元素顺序反转的方法分析
2018/07/02 Javascript
微信小程序中this.data与this.setData的区别详解
2018/09/17 Javascript
VUE实现可随意拖动的弹窗组件
2018/09/25 Javascript
JS实现的获取银行卡号归属地及银行卡类型操作示例
2019/01/08 Javascript
原生js实现each方法实例代码详解
2019/05/27 Javascript
Javascript Worker子线程代码实例
2020/02/20 Javascript
python多进程并发demo实例解析
2019/12/13 Python
pytorch 使用加载训练好的模型做inference
2020/02/20 Python
Python3如何判断三角形的类型
2020/04/12 Python
解决在keras中使用model.save()函数保存模型失败的问题
2020/05/21 Python
美国著名手表网站:Timepiece
2017/11/15 全球购物
Java中实现多态的机制是什么?
2014/12/07 面试题
UDP协议功能
2013/01/06 面试题
小学生演讲稿
2014/01/12 职场文书
经典促销广告词大全
2014/03/19 职场文书
市场营销毕业生自荐信范文
2014/04/01 职场文书
房产继承公证书
2014/04/09 职场文书
企业优秀员工事迹材料
2014/05/28 职场文书
2015年学生会纪检部工作总结
2015/03/31 职场文书
芙蓉镇观后感
2015/06/10 职场文书
一文搞懂Python Sklearn库使用
2021/08/23 Python
【DOTA2】当街暴打?PSG LGD vs VG - DPC 2022 WINTER TOUR CN
2022/04/02 DOTA