在终端启动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 matplotlib坐标轴设置的方法
Dec 05 Python
python实现按长宽比缩放图片
Jun 07 Python
解决pycharm py文件运行后停止按钮变成了灰色的问题
Nov 29 Python
python matplotlib折线图样式实现过程
Nov 04 Python
Python笔记之工厂模式
Nov 20 Python
使用PyTorch实现MNIST手写体识别代码
Jan 18 Python
Tensorflow矩阵运算实例(矩阵相乘,点乘,行/列累加)
Feb 05 Python
基于Python生成个性二维码过程详解
Mar 05 Python
详解用Python爬虫获取百度企业信用中企业基本信息
Jul 02 Python
Python限制内存和CPU使用量的方法(Unix系统适用)
Aug 04 Python
vue.js刷新当前页面的实例讲解
Dec 29 Python
Anaconda安装pytorch及配置PyCharm 2021环境
Jun 04 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
WordPress的主题编写中获取头部模板和底部模板
2015/12/28 PHP
php 读写json文件及修改json的方法
2018/03/07 PHP
PHP 99乘法表的几种实现代码
2020/10/13 PHP
使用JavaScript 实现对象 匀速/变速运动的方法
2013/05/08 Javascript
使用 Node.js 做 Function Test实现方法
2013/10/25 Javascript
JavaScript定义类的几种方式总结
2014/01/06 Javascript
php的文件上传入门教程(实例讲解)
2014/04/10 Javascript
jQuery 插件开发指南
2014/11/14 Javascript
常用jQuery代码分享
2015/07/14 Javascript
javascript生成img标签的3种实现方法(对象、方法、html)
2015/12/25 Javascript
js学习之----深入理解闭包
2016/11/21 Javascript
javascript中call,apply,bind函数用法示例
2016/12/19 Javascript
使用vue-aplayer插件时出现的问题的解决
2018/03/02 Javascript
vue 实现左右拖拽元素并且不超过他的父元素的宽度
2018/11/30 Javascript
微信小程序实现多选框全选与取消全选功能示例
2019/05/14 Javascript
解决layui checkbox 提交多个值的问题
2019/09/02 Javascript
js 实现watch监听数据变化的代码
2019/10/13 Javascript
JS运算符简单用法示例
2020/01/19 Javascript
vue 使用 vue-pdf 实现pdf在线预览的示例代码
2020/04/26 Javascript
JavaScript事件循环及宏任务微任务原理解析
2020/09/02 Javascript
用Nodejs实现在终端中炒股的实现
2020/10/18 NodeJs
python实现的简单抽奖系统实例
2015/05/22 Python
python实现反转部分单向链表
2018/09/27 Python
python读取txt文件,去掉空格计算每行长度的方法
2018/12/20 Python
Python3匿名函数lambda介绍与使用示例
2019/05/18 Python
python如何求圆的面积
2020/07/01 Python
html5实现滑块功能之type="range"属性
2020/02/18 HTML / CSS
HTML如何让IMG自动适应DIV容器大小的实现方法
2020/02/25 HTML / CSS
中国海淘族值得信赖的海淘返利网站:55海淘
2017/01/16 全球购物
开会迟到检讨书
2014/02/03 职场文书
高中生学期学习自我评价
2014/02/24 职场文书
给公司的建议书范文
2014/05/13 职场文书
欢迎标语大全
2014/06/21 职场文书
保险专业求职信
2014/07/07 职场文书
Vue接口封装的完整步骤记录
2021/05/14 Vue.js
Python图片检索之以图搜图
2021/05/31 Python