Python3使用pickle.dump时报TypeError: write()参数需为str而非bytes
问题根因
- 该错误与Python安装配置无关,属于文件打开模式使用错误
- Python3中
open()的'w'为文本写入模式,仅支持写入字符串类型数据;pickle.dump()会将对象序列化为字节流,类型不匹配就会触发你遇到的类型错误。
修复方法
修改文件打开的模式参数,将'w'替换为'wb'(二进制写入模式)即可,修正后完整代码如下:
import pickle import math object_pi = math.pi file_pi = open('filename_pi.obj', 'wb') pickle.dump(object_pi, file_pi) file_pi.close()
最佳实践
推荐使用with上下文管理器管理文件句柄,无需手动调用close()关闭文件,可避免异常场景下的资源泄漏:
import pickle import math object_pi = math.pi with open('filename_pi.obj', 'wb') as file_pi: pickle.dump(object_pi, file_pi)
注意:后续读取该序列化文件时,也需要使用
'rb'二进制读取模式打开文件,再调用pickle.load()读取内容,否则会触发同类类型错误。
内容的提问来源于stack exchange,提问作者Daniel
相关产品推荐
相关产品推荐

