在终端启动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 cx_Oracle模块的安装和使用详细介绍
Feb 13 Python
LRUCache的实现原理及利用python实现的方法
Nov 21 Python
TensorFlow变量管理详解
Mar 10 Python
Django 使用logging打印日志的实例
Apr 28 Python
Python爬虫包BeautifulSoup简介与安装(一)
Jun 17 Python
tensorflow 自定义损失函数示例代码
Feb 05 Python
Python实现密钥密码(加解密)实例详解
Apr 26 Python
python学习将数据写入文件并保存方法
Jun 07 Python
Django REST Swagger实现指定api参数
Jul 07 Python
python 爬取百度文库并下载(免费文章限定)
Dec 04 Python
python通过函数名调用函数的几种方法总结
Jun 07 Python
Python3 多线程(连接池)操作MySQL插入数据
Jun 09 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采集时被封ip的解决方法
2010/08/29 PHP
php各种编码集详解和以及在什么情况下进行使用
2011/09/11 PHP
最近项目写了一些js,水平有待提高
2009/01/31 Javascript
web css实现整站样式互相切换
2013/10/29 Javascript
javascript中数组的定义及使用实例
2015/01/21 Javascript
Javascript 计算字符串在localStorage中所占字节数
2015/10/21 Javascript
最简单纯JavaScript实现Tab标签页切换的方式(推荐)
2016/07/25 Javascript
Vue.js创建Calendar日历效果
2016/11/03 Javascript
jQuery实现遮罩层登录对话框
2016/12/29 Javascript
bootstrap网格系统使用方法解析
2017/01/13 Javascript
ES6新特性之字符串的扩展实例分析
2017/04/01 Javascript
NodeJs模拟登陆正方教务
2017/04/28 NodeJs
Nuxt配合Node在实际生产中的应用详解
2018/08/07 Javascript
vue通过数据过滤实现表格合并
2020/11/30 Javascript
html+jQuery实现拖动滑块图片拼图验证码插件【移动端适用】
2019/09/10 jQuery
微信小程序自定义tabbar custom-tab-bar 6s出不来解决方案(cover-view不兼容)
2019/11/01 Javascript
Vue通过getAction的finally来最大程度避免影响主数据呈现问题
2020/04/24 Javascript
vue键盘事件点击事件加native操作
2020/07/27 Javascript
vue 获取url参数、get参数返回数组的操作
2020/11/12 Javascript
Python实现微信公众平台自定义菜单实例
2015/03/20 Python
Django的session中对于用户验证的支持
2015/07/23 Python
Python实现截屏的函数
2015/07/26 Python
python遍历序列enumerate函数浅析
2017/10/17 Python
python3将视频流保存为本地视频文件
2018/06/20 Python
keras .h5转移动端的.tflite文件实现方式
2020/05/25 Python
Python分析微信好友性别比例和省份城市分布比例的方法示例【基于itchat模块】
2020/05/29 Python
新百伦折扣店:Joe’s New Balance Outlet
2016/08/20 全球购物
惠普香港官方商店:HP香港
2019/04/30 全球购物
Perfume’s Club意大利官网:欧洲美妆电商
2019/05/03 全球购物
俄语专业职业生涯规划
2014/02/26 职场文书
珠宝店促销方案
2014/03/21 职场文书
三八活动策划方案
2014/08/17 职场文书
对学校的意见和建议
2015/06/04 职场文书
彻底理解golang中什么是nil
2021/04/29 Golang
特别篇动画《总之就是非常可爱 ~制服~》PV公开,2022年夏季播出
2022/04/04 日漫
Android RecyclerView实现九宫格效果
2022/06/28 Java/Android