在终端启动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抓取豆瓣图片并自动保存示例学习
Jan 10 Python
爬山算法简介和Python实现实例
Apr 26 Python
用实例分析Python中method的参数传递过程
Apr 02 Python
python3+PyQt5图形项的自定义和交互 python3实现page Designer应用程序
Jul 20 Python
Windows下安装Scrapy
Oct 17 Python
使用python Fabric动态修改远程机器hosts的方法
Oct 26 Python
python如何查看微信消息撤回
Nov 27 Python
解决.ui文件生成的.py文件运行不出现界面的方法
Jun 19 Python
linux环境下Django的安装配置详解
Jul 22 Python
pytorch实现onehot编码转为普通label标签
Jan 02 Python
如何基于python实现不邻接植花
May 01 Python
10款最佳Python开发工具推荐,每一款都是神器
Oct 15 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
牡丹941资料
2021/03/01 无线电
adodb与adodb_lite之比较
2006/12/31 PHP
sql注入与转义的php函数代码
2013/06/17 PHP
php使用ZipArchive提示Fatal error: Class ZipArchive not found in的解决方法
2014/11/04 PHP
Zend Framework入门之环境配置及第一个Hello World示例(附demo源码下载)
2016/03/21 PHP
thinkphp5实现微信扫码支付
2019/12/23 PHP
jQuery Ajax文件上传(php)
2009/06/16 Javascript
javascript 继承实现方法
2009/08/26 Javascript
学习ExtJS fit布局使用说明
2009/10/08 Javascript
node.js中的fs.exists方法使用说明
2014/12/17 Javascript
浅谈Javascript中的Function与Object
2015/01/26 Javascript
浅谈JSON.stringify()和JOSN.parse()方法的不同
2016/08/29 Javascript
AngularJS 过滤与排序详解及实例代码
2016/09/14 Javascript
jQuery Easy UI中根据第一个下拉框选中的值设置第二个下拉框是否可以编辑
2016/11/29 Javascript
概述一个页面从输入URL到页面加载完的过程
2016/12/16 Javascript
layui弹出层效果实现代码
2017/05/19 Javascript
深入理解react-router@4.0 使用和源码解析
2017/05/23 Javascript
全面解析Node.js 8 重要功能和修复
2017/06/02 Javascript
基于Cookie常用操作以及属性介绍
2017/09/07 Javascript
js实现可以点击收缩或张开的悬浮窗
2017/09/18 Javascript
详解express + mock让前后台并行开发
2018/06/06 Javascript
NodeJs入门教程之定时器和队列
2019/03/08 NodeJs
JS用最简单的方法实现四舍五入
2019/08/27 Javascript
jQuery实现轮播图效果
2019/11/26 jQuery
Python的迭代器和生成器
2015/07/29 Python
Python PyAutoGUI模块控制鼠标和键盘实现自动化任务详解
2018/09/04 Python
Python3简单爬虫抓取网页图片代码实例
2019/08/26 Python
Python startswith()和endswith() 方法原理解析
2020/04/28 Python
18-35岁旅游团的全球领导者:Contiki
2017/02/08 全球购物
国际性能运动服装品牌:Dare 2b
2018/07/27 全球购物
皇家阿尔伯特英国官方商店:Royal Albert骨瓷
2019/03/25 全球购物
可靠的数据流传输TCP
2016/03/15 面试题
导师评语大全
2014/04/26 职场文书
借条格式范本
2015/05/25 职场文书
花田少年史观后感
2015/06/16 职场文书
创业计划书之农家乐
2019/10/09 职场文书