今天運行了一個GitHub上的源碼出現TypeError: write() argument must be str, not bytes錯誤,主要是因爲源碼是python2實現的,而我使用的是python3。
python2寫入或讀取二進制文件時,使用w或r模式即可,而python3給open函數添加了名爲encoding的新參數,而這個新參數的默認值卻是‘utf-8’。這樣在文件句柄上進行read和write操作時,系統就要求開發者必須傳入包含Unicode字符的實例,而不接受包含二進制數據的bytes實例。
解決辦法是使用二進制寫入模式(‘wb’)來開啓待操作文件,而不能像原來那樣,採用字符寫入模式(‘w’)。