在終端啟動(dòng)Python時(shí)報(bào)錯(cuò)的解決方案
最近,在終端啟動(dòng)Python時(shí),報(bào)了一個(gè)錯(cuò)誤:
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歷史文件(系統(tǒng)用戶目錄下的.python_history),其編碼方式為“utf-8”,而”history.py”中讀取歷史文件時(shí)使用的編碼方式為“gbk”,所以會(huì)報(bào)錯(cuò)。
解決方法
在history.py中使用`for line in open(filename, 'r')`來打開文件并讀取每一行,使用的是默認(rèn)的編碼方式。需要根據(jù)不同文件的編碼方式傳入相應(yīng)的參數(shù)值。
1. 首先檢測(cè)出要打開的文件的編碼方式。
在類中定義一個(gè)私有方法_get_encoding,作用是檢測(cè)文件的編碼方式,并返回。(需要導(dǎo)入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. 修改歷史文件內(nèi)容的讀取
encoding = self._get_encoding(filename) for line in open(filename, 'r', encoding=encoding): self.add_history(lineobj.ReadLineTextBuff(ensure_unicode(line.rstrip())))
以上就是在終端啟動(dòng)Python時(shí)報(bào)錯(cuò)的解決方案的詳細(xì)內(nèi)容,更多關(guān)于終端啟動(dòng)python報(bào)錯(cuò)的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
python tornado獲取請(qǐng)求參數(shù)的方法
在Tornado框架中,獲取請(qǐng)求參數(shù)包括查詢字符串參數(shù)、表單數(shù)據(jù)和JSON數(shù)據(jù)等,JSON數(shù)據(jù)通過直接訪問self.request.json獲取,正確處理這些數(shù)據(jù)需要注意請(qǐng)求的Content-Type和數(shù)據(jù)格式,感興趣的朋友跟隨小編一起看看吧2024-09-09pandas去重復(fù)行并分類匯總的實(shí)現(xiàn)方法
這篇文章主要介紹了pandas去重復(fù)行并分類匯總的實(shí)現(xiàn)方法,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2019-01-01Python3正則匹配re.split,re.finditer及re.findall函數(shù)用法詳解
這篇文章主要介紹了Python3正則匹配re.split,re.finditer及re.findall函數(shù)用法,結(jié)合實(shí)例形式詳細(xì)分析了正則匹配re.split,re.finditer及re.findall函數(shù)的概念、參數(shù)、用法及操作注意事項(xiàng),需要的朋友可以參考下2018-06-06Python 2.7.x 和 3.x 版本的重要區(qū)別小結(jié)
這篇文章主要介紹了Python 2.7.x 和 3.x 版本的重要區(qū)別小結(jié),需要的朋友可以參考下2014-11-11Python matplotlib以日期為x軸作圖代碼實(shí)例
這篇文章主要介紹了Python matplotlib以日期為x軸作圖代碼實(shí)例,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2019-11-11超好玩的"隔空操物"通過Python?MediaPipe庫(kù)實(shí)現(xiàn)
這篇文章主要介紹了python+mediapipe+opencv實(shí)現(xiàn)手部關(guān)鍵點(diǎn)檢測(cè)功能(手勢(shì)識(shí)別),本文僅僅簡(jiǎn)單介紹了mediapipe的使用,而mediapipe提供了大量關(guān)于圖像識(shí)別等的方法,需要的朋友可以參考下2022-01-01