在终端启动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 相关文章推荐
windows下安装python paramiko模块的代码
Feb 10 Python
Python的subprocess模块总结
Nov 07 Python
Python实现程序的单一实例用法分析
Jun 03 Python
python中defaultdict的用法详解
Jun 07 Python
python计算两个矩形框重合百分比的实例
Nov 07 Python
代码详解django中数据库设置
Jan 28 Python
bluepy 一款python封装的BLE利器简单介绍
Jun 25 Python
使用tqdm显示Python代码执行进度功能
Dec 08 Python
解决python replace函数替换无效问题
Jan 18 Python
Python openpyxl模块原理及用法解析
Jan 19 Python
Python Handler处理器和自定义Opener原理详解
Mar 05 Python
python自动化测试三部曲之request+django实现接口测试
Oct 07 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获取数组中键值最大数组项的索引值
2015/03/17 PHP
php将远程图片保存到本地服务器的实现代码
2015/08/03 PHP
php模式设计之观察者模式应用实例分析
2019/09/25 PHP
php实现推荐功能的简单实例
2019/09/29 PHP
jquery foreach使用示例
2013/09/12 Javascript
js判读浏览器是否支持html5的canvas的代码
2013/11/18 Javascript
js原型继承的两种方法对比介绍
2014/03/30 Javascript
JavaScript基础知识学习笔记
2014/12/02 Javascript
jQuery选择器源码解读(七):elementMatcher函数
2015/03/31 Javascript
JavaScript中的toDateString()方法使用详解
2015/06/12 Javascript
javascript实现手机震动API代码
2015/08/05 Javascript
基于jQuery实现的无刷新表格分页实例
2016/02/17 Javascript
关于function类中定义变量this的简单说明
2016/05/28 Javascript
基于jQuery实现仿百度首页选项卡切换效果
2016/05/29 Javascript
IE下JS保存图片的简单实例
2016/07/15 Javascript
功能强大的Bootstrap使用手册(一)
2016/08/02 Javascript
Angular下H5上传图片的方法(可多张上传)
2017/01/09 Javascript
三种Webpack打包方式(小结)
2018/09/19 Javascript
js实现点赞效果
2020/03/16 Javascript
jQuery实现倒计时功能完整示例
2020/06/01 jQuery
[47:43]完美世界DOTA2联赛PWL S3 Magama vs GXR 第二场 12.19
2020/12/24 DOTA
Python 数据库操作 SQLAlchemy的示例代码
2019/02/18 Python
python统计函数库scipy.stats的用法解析
2020/02/25 Python
python实现取余操作的简单实例
2020/08/16 Python
Django 用户认证Auth组件的使用
2020/11/30 Python
python+selenium+chrome实现淘宝购物车秒杀自动结算
2021/01/07 Python
HTML5 视频播放(video),JavaScript控制视频的实例代码
2018/10/08 HTML / CSS
请假条的格式
2014/04/11 职场文书
校园环保建议书
2014/05/14 职场文书
投标承诺书怎么写
2014/05/24 职场文书
学校安全管理责任书
2014/07/23 职场文书
民警个人对照检查剖析材料
2014/09/17 职场文书
2014年公路养护工作总结
2014/12/04 职场文书
开网店计划分析
2019/07/30 职场文书
使用 JavaScript 制作页面效果
2021/04/21 Javascript
Linux中文件的基本属性介绍
2022/06/01 Servers