在终端启动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 相关文章推荐
Android应用开发中Action bar编写的入门教程
Feb 26 Python
Python爬虫实现网页信息抓取功能示例【URL与正则模块】
May 18 Python
Python 2.x如何设置命令执行的超时时间实例
Oct 19 Python
python3+PyQt5泛型委托详解
Apr 24 Python
python的格式化输出(format,%)实例详解
Jun 01 Python
Python对象转换为json的方法步骤
Apr 25 Python
Python解析多帧dicom数据详解
Jan 13 Python
基于python连接oracle导并出数据文件
Apr 28 Python
解决python便携版无法直接运行py文件的问题
Sep 01 Python
python录音并调用百度语音识别接口的示例
Dec 01 Python
python 使用xlsxwriter循环向excel中插入数据和图片的操作
Jan 01 Python
SpringBoot首页设置解析(推荐)
Feb 11 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
德生S2000收音机更换“钕铁硼”全频扬声器
2021/03/02 无线电
用phpmyadmin更改mysql5.0登录密码
2008/03/25 PHP
php&mysql 日期操作小记
2012/02/27 PHP
PHP 查找字符串常用函数介绍
2012/06/07 PHP
php判断文件夹是否存在不存在则创建
2015/04/09 PHP
php批量删除操作(数据访问)
2017/05/23 PHP
JavaScript的Cookies
2008/01/16 Javascript
Mootools 1.2教程 滚动条(Slider)
2009/09/15 Javascript
XmlUtils JS操作XML工具类
2009/10/01 Javascript
jQuery开发者都需要知道的5个小技巧
2010/01/08 Javascript
关于event.cancelBubble和event.stopPropagation()的区别介绍
2011/12/11 Javascript
javascript中负数算术右移、逻辑右移的奥秘探索
2013/10/17 Javascript
Javascript 按位左移运算符使用介绍(
2014/02/04 Javascript
Node.js配合node-http-proxy解决本地开发ajax跨域问题
2016/08/31 Javascript
js 提交form表单和设置form表单请求路径的实现方法
2016/10/25 Javascript
Angularjs使用过滤器完成排序功能
2017/09/20 Javascript
ES6 系列之 WeakMap的使用示例
2018/08/06 Javascript
node.js实现为PDF添加水印的示例代码
2018/12/05 Javascript
js中对象与对象创建方法的各种方法
2019/02/27 Javascript
Bootstrap 时间日历插件bootstrap-datetimepicker配置与应用小结
2019/05/28 Javascript
javascript实现扫雷简易版
2020/08/18 Javascript
微信小程序实现点击页面出现文字
2020/09/21 Javascript
[03:01]完美盛典趣味短片 DOTA2年度最佳&拉胯英雄
2019/12/07 DOTA
浅析Python多线程下的变量问题
2015/04/28 Python
Python win32com 操作Exce的l简单方法(必看)
2017/05/25 Python
Python网络编程详解
2017/10/31 Python
PyQt5实现让QScrollArea支持鼠标拖动的操作方法
2019/06/19 Python
Python八皇后问题解答过程详解
2019/07/29 Python
python上下文管理的使用场景实例讲解
2021/03/03 Python
CSS3制作文字半透明倒影效果的两种实现方式
2014/08/08 HTML / CSS
H5新属性audio音频和video视频的控制详解(推荐)
2016/12/09 HTML / CSS
印度最大的旅游网站:MakeMyTrip
2016/10/05 全球购物
我的祖国演讲稿
2014/05/04 职场文书
2015届大学生就业推荐表自我评价
2014/09/27 职场文书
信用卡催款律师函
2015/05/27 职场文书
MySQL 分页查询的优化技巧
2021/05/12 MySQL