在终端启动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之编写类之二方法
Oct 11 Python
跟老齐学Python之网站的结构
Oct 24 Python
Python网络编程详解
Oct 31 Python
浅谈pandas中Dataframe的查询方法([], loc, iloc, at, iat, ix)
Apr 10 Python
Python中判断输入是否为数字的实现代码
May 26 Python
python实现朴素贝叶斯算法
Nov 19 Python
Django如何自定义model创建数据库索引的顺序
Jun 20 Python
使用python来调用CAN通讯的DLL实现方法
Jul 03 Python
详解Django定时任务模块设计与实践
Jul 24 Python
Python 取numpy数组的某几行某几列方法
Oct 24 Python
Pytorch训练过程出现nan的解决方式
Jan 02 Python
Python 判断时间是否在时间区间内的实例
May 16 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
各种战术和打法的原创者
2020/03/04 星际争霸
PHP过滤★等特殊符号的正则
2014/01/27 PHP
CodeIgniter中使用Smarty3基本配置
2015/06/29 PHP
PHP实现一个轻量级容器的方法
2019/01/28 PHP
Laravel 实现Eloquent模型分组查询并返回每个分组的数量 groupBy()
2019/10/23 PHP
Javascript 强制类型转换函数
2009/05/17 Javascript
javascript 写类方式之五
2009/07/05 Javascript
Mootools 1.2教程 设置和获取样式表属性
2009/09/15 Javascript
我遇到的参数传递中 双引号单引号嵌套问题
2010/02/11 Javascript
如何获取网站icon有哪些可行的方法
2014/06/05 Javascript
JavaScript利用append添加元素报错的解决方法
2014/07/01 Javascript
js中回调函数的学习笔记
2014/07/31 Javascript
JavaScript字符串对象charAt方法入门实例(用于取得指定位置的字符)
2014/10/17 Javascript
JavaScript 实现打印,打印预览,打印设置
2014/12/30 Javascript
jQuery实现拖拽可编辑模块功能代码
2017/01/12 Javascript
jquery获取下拉框中的循环值
2017/02/08 Javascript
深入理解Vue生命周期、手动挂载及挂载子组件
2017/09/27 Javascript
微信小程序实现下载进度条的方法
2017/12/08 Javascript
node内置调试方法总结
2018/02/22 Javascript
JavaScript ES 模块的使用
2020/11/12 Javascript
[54:29]2018DOTA2亚洲邀请赛 4.7 淘汰赛 VP vs LGD 第二场
2018/04/09 DOTA
Python实现分割文件及合并文件的方法
2015/07/10 Python
Python正则抓取网易新闻的方法示例
2017/04/21 Python
Python实现的简单dns查询功能示例
2017/05/24 Python
python序列化与数据持久化实例详解
2019/12/20 Python
Python钉钉报警及Zabbix集成钉钉报警的示例代码
2020/08/17 Python
Python实例方法、类方法、静态方法区别详解
2020/09/05 Python
Pytorch如何切换 cpu和gpu的使用详解
2021/03/01 Python
西班牙灯具网上商店:Lampara.es
2018/06/05 全球购物
转党组织关系介绍信
2014/01/08 职场文书
普通话演讲稿
2014/09/03 职场文书
县委常委班子对照检查材料思想汇报
2014/09/28 职场文书
2014年医德医风工作总结
2014/11/13 职场文书
求职简历自我评价怎么写
2015/03/10 职场文书
创业计划书之川味火锅店
2019/09/02 职场文书
世界十大儿童漫画书排名,法国国宝漫画排第五,第二是轰动日本连环
2022/03/18 欧美动漫