在终端启动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在windows下创建隐藏窗口子进程的方法
Jun 04 Python
Python的装饰器模式与面向切面编程详解
Jun 21 Python
Python中几个比较常见的名词解释
Jul 04 Python
Python实现针对含中文字符串的截取功能示例
Sep 22 Python
Python如何生成树形图案
Jan 03 Python
pandas进行数据的交集与并集方式的数据合并方法
Jun 27 Python
Python做智能家居温湿度报警系统
Sep 25 Python
Python正则表达式指南 推荐
Oct 09 Python
PyCharm 设置SciView工具窗口的方法
Jan 15 Python
python paramiko远程服务器终端操作过程解析
Dec 14 Python
Python 序列化和反序列化库 MarshMallow 的用法实例代码
Feb 25 Python
selenium.webdriver中add_argument方法常用参数表
Apr 08 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
ThinkPHP框架任意代码执行漏洞的利用及其修复方法
2014/07/04 PHP
在PHP中输出JS语句以及乱码问题的解决方案
2019/02/13 PHP
javascript编程起步(第四课)
2007/02/27 Javascript
面向对象的Javascript之三(封装和信息隐藏)
2012/01/27 Javascript
jQuery jcrop插件截图使用方法
2013/11/20 Javascript
JavaScript AOP编程实例
2015/06/16 Javascript
使用JQuery选择HTML遍历函数的方法
2016/09/17 Javascript
基于Javascript实现的不重复ID的生成器
2016/12/25 Javascript
深入理解vue路由的使用
2017/03/24 Javascript
Javascript实现时间倒计时效果
2017/07/15 Javascript
Vue-cli项目获取本地json文件数据的实例
2018/03/07 Javascript
Javascript中绑定click事件的四种方式介绍
2018/10/26 Javascript
vue配置font-awesome5的方法步骤
2019/01/27 Javascript
Vue+Koa2 打包后进行线上部署的教程详解
2019/07/31 Javascript
解析原来浏览器原生支持JS Base64编码解码
2019/08/12 Javascript
Vue实现点击箭头上下移动效果
2020/06/11 Javascript
JS如何实现封装列表右滑动删除收藏按钮
2020/07/23 Javascript
跟老齐学Python之有点简约的元组
2014/09/24 Python
Python中使用logging模块打印log日志详解
2015/04/05 Python
Python统计日志中每个IP出现次数的方法
2015/07/06 Python
python图片验证码生成代码
2016/07/02 Python
python opencv实现旋转矩形框裁减功能
2018/07/25 Python
python通过ffmgep从视频中抽帧的方法
2018/12/05 Python
python json 递归打印所有json子节点信息的例子
2020/02/27 Python
PyCharm取消波浪线、下划线和中划线的实现
2020/03/03 Python
css3 2D图片转动样式可以扩充到Js当中
2014/04/29 HTML / CSS
美国顶级户外凉鞋品牌:Chacos
2017/03/27 全球购物
Lookfantastic香港官网:英国知名美妆购物网站
2018/06/19 全球购物
捷克玩具商店:Bambule
2019/02/23 全球购物
英国马莎百货印度官网:Marks & Spencer印度
2020/10/08 全球购物
Ruby如何实现动态方法调用
2012/11/18 面试题
学校经典推荐信
2013/10/30 职场文书
人事行政主管岗位职责
2013/12/22 职场文书
学生会副主席竞聘书
2014/03/31 职场文书
2015年元旦标语大全
2014/12/09 职场文书
八年级作文之友谊
2019/12/02 职场文书