在终端启动Python时报错的解决方案

 更新时间:2020年11月20日 16:34:24   作者:风中之云  
这篇文章主要介绍了在终端启动Python时报错的解决方案,帮助大家更好的理解和使用python,感兴趣的朋友可以了解下

最近,在终端启动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报错的资料请关注脚本之家其它相关文章!

相关文章

  • PyQt5实现登录页面

    PyQt5实现登录页面

    这篇文章主要为大家详细介绍了PyQt5实现登录页面,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2020-05-05
  • python判断字符串或者集合是否为空的实例

    python判断字符串或者集合是否为空的实例

    今天小编就为大家分享一篇python判断字符串或者集合是否为空的实例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2019-01-01
  • python tornado获取请求参数的方法

    python tornado获取请求参数的方法

    在Tornado框架中,获取请求参数包括查询字符串参数、表单数据和JSON数据等,JSON数据通过直接访问self.request.json获取,正确处理这些数据需要注意请求的Content-Type和数据格式,感兴趣的朋友跟随小编一起看看吧
    2024-09-09
  • pandas去重复行并分类汇总的实现方法

    pandas去重复行并分类汇总的实现方法

    这篇文章主要介绍了pandas去重复行并分类汇总的实现方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-01-01
  • Python3正则匹配re.split,re.finditer及re.findall函数用法详解

    Python3正则匹配re.split,re.finditer及re.findall函数用法详解

    这篇文章主要介绍了Python3正则匹配re.split,re.finditer及re.findall函数用法,结合实例形式详细分析了正则匹配re.split,re.finditer及re.findall函数的概念、参数、用法及操作注意事项,需要的朋友可以参考下
    2018-06-06
  • Python 2.7.x 和 3.x 版本的重要区别小结

    Python 2.7.x 和 3.x 版本的重要区别小结

    这篇文章主要介绍了Python 2.7.x 和 3.x 版本的重要区别小结,需要的朋友可以参考下
    2014-11-11
  • 对python中的装包与解包实例详解

    对python中的装包与解包实例详解

    今天小编就为大家分享一篇对python中的装包与解包实例详解,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2019-08-08
  • python使用Turtle库画画写名字

    python使用Turtle库画画写名字

    Turtle库是Python语言中一个很流行的绘制图像的函数库,本篇文章小编就带大家学习python利用Turtle库画画写名字的相关资料,需要的朋友可以参考下面文章的具体内容
    2021-09-09
  • Python matplotlib以日期为x轴作图代码实例

    Python matplotlib以日期为x轴作图代码实例

    这篇文章主要介绍了Python matplotlib以日期为x轴作图代码实例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2019-11-11
  • 超好玩的"隔空操物"通过Python MediaPipe库实现

    超好玩的"隔空操物"通过Python MediaPipe库实现

    这篇文章主要介绍了python+mediapipe+opencv实现手部关键点检测功能(手势识别),本文仅仅简单介绍了mediapipe的使用,而mediapipe提供了大量关于图像识别等的方法,需要的朋友可以参考下
    2022-01-01

最新评论