您好,登錄后才能下訂單哦!
本篇文章為大家展示了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無法在終端啟動怎么解決,你們學到知識或技能了嗎?如果還想學到更多技能或者豐富自己的知識儲備,歡迎關注億速云行業資訊頻道。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。