在终端启动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刷投票的脚本实现代码
Nov 08 Python
基于python 处理中文路径的终极解决方法
Apr 12 Python
python向已存在的excel中新增表,不覆盖原数据的实例
May 02 Python
Python3使用turtle绘制超立方体图形示例
Jun 19 Python
详解Python打包分发工具setuptools
Aug 05 Python
新年福利来一波之Python轻松集齐五福(demo)
Jan 20 Python
opencv+python实现鼠标点击图像,输出该点的RGB和HSV值
Jun 02 Python
Pycharm中配置远程Docker运行环境的教程图解
Jun 11 Python
Python抖音快手代码舞(字符舞)的实现方法
Feb 07 Python
pandas map(),apply(),applymap()区别解析
Feb 24 Python
python使用glob检索文件的操作
May 20 Python
python​格式化字符串
Apr 20 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
利用文件属性结合Session实现在线人数统计
2006/10/09 PHP
mysql5详细安装教程
2007/01/15 PHP
php上的memcache和memcached两个pecl库
2010/03/29 PHP
PHP中的生成XML文件的4种方法分享
2012/10/06 PHP
神盾加密解密教程(二)PHP 神盾解密
2014/06/08 PHP
PHP中常用的字符串格式化函数总结
2014/11/19 PHP
PHP采用超长(超大)数字运算防止数字以科学计数法显示的方法
2016/04/01 PHP
Discuz论坛密码与密保加密规则
2016/12/19 PHP
PHP手机短信验证码实现流程详解
2018/05/17 PHP
PHP程序员学习使用Swoole的理由
2018/06/24 PHP
PHP+MySql实现一个简单的留言板
2020/07/19 PHP
JS中字符问题(二进制/十进制/十六进制及ASCII码之间的转换)
2008/11/03 Javascript
自用js开发框架小成 学习js的朋友可以看看
2010/11/16 Javascript
用原生JS获取CLASS对象(很简单实用)
2014/10/15 Javascript
JavaScript实现的内存数据库LokiJS介绍和入门实例
2014/11/17 Javascript
AngularJs篇:使用AngularJs打造一个简易权限系统的实现代码
2016/12/26 Javascript
Vue插件打包与发布的方法示例
2018/08/20 Javascript
详解js模板引擎art template数组渲染的方法
2018/10/09 Javascript
python中文分词,使用结巴分词对python进行分词(实例讲解)
2017/11/14 Python
Python使用matplotlib绘制多个图形单独显示的方法示例
2018/03/14 Python
python使用正则表达式来获取文件名的前缀方法
2018/10/21 Python
详解Python的数据库操作(pymysql)
2019/04/04 Python
python使用配置文件过程详解
2019/12/28 Python
Python 调用有道翻译接口实现翻译
2020/03/02 Python
如何对python的字典进行排序
2020/06/19 Python
最简单的matplotlib安装教程(小白)
2020/07/28 Python
仿CSDN Blog返回页面顶部功能实现原理及代码
2013/06/30 HTML / CSS
意大利综合购物网站:Giordano Shop
2016/10/21 全球购物
个人求职简历的自我评价范文
2013/10/09 职场文书
百货商场楼层班组长竞聘书
2014/03/31 职场文书
纪律教育月活动总结
2014/08/26 职场文书
防灾减灾标语
2014/10/07 职场文书
医德医风学习心得体会
2016/01/25 职场文书
《灰雀》教学反思
2016/02/19 职场文书
会议主持词通用版
2019/04/02 职场文书
Vue OpenLayer 为地图绘制风场效果
2022/04/24 Vue.js