問題
今天下載了一個腳本,在運行時報錯TypeError: a bytes-like object is required, not 'str'
,這個錯誤從字面上看就很明顯,類型錯誤:需要一個類字節的對象,而不是字符串。具體報錯的位置在:
label_dict = pickle.load(f)
Python中的Pickle
模塊實現了基本的數據序列與反序列化。這一句中pickle
在反序列化文件時報錯!
原因
那麼既然是在加載文件時報錯,就要看一下怎麼讀取文件的:
f = open('./testwords','r')
label_dict = pickle.load(f)
我們知道:在open()
函數中使用'r'
屬性,即文本方式讀取,而'rb'
,以二進制文件方式讀取。
解決方案
將f = open('./testwords','r')
改爲f = open('./testwords','rb')
即可!
也就是說,pickle.load()
和pickle.dump()
都必須要傳入二進制的格式纔可以!
但是在python2中則無需擔心這個問題,寫成r
也不會出錯!