使用pickle保存数据时出现TypeError的原因及解决方法
解决pickle dump时的
TypeError: write() argument must be str, not bytes 这个问题我之前排查过好多次,核心原因其实是文件打开模式和pickle的写入需求不匹配。
你贴的代码里写了with open('vocabulary-embedding.pickle', 'wb') as f:,理论上'wb'是二进制写入模式,完全适配pickle的二进制输出,但错误提示说明实际运行时,你的文件对象是用**文本模式('w')**打开的——文本模式下,文件的write()方法只接受字符串,而pickle.dump()会生成二进制字节流,自然就触发了类型错误。
可能的原因和解决步骤:
- 检查代码拼写:先仔细核对你的实际运行代码,是不是不小心把
'wb'写成了'w'?比如手滑少打了个b,这种小失误很常见。 - 确认文件模式正确:确保打开文件时确实用的是
'wb'(二进制写入),而不是'w'(文本写入)或者其他错误模式。 - 重启运行环境:如果代码看起来没问题,但错误依然存在,可能是编辑器的缓存或者终端的会话问题,重启编辑器/终端后重新运行代码试试。
- 极简代码验证:你可以先跑一段极简测试代码,确认环境本身没问题:
如果这段代码能正常运行,说明原代码里肯定有细节没注意到,再回去检查变量或文件路径相关的部分。import pickle test_data = [1, 2, 3] with open('test.pickle', 'wb') as f: pickle.dump(test_data, f, -1)
另外,你的输入数据(embedding、idx2word、word2idx)都是pickle可以正常序列化的类型,所以数据本身不会导致这个错误,不用太担心数据格式的问题。
内容的提问来源于stack exchange,提问作者Sarthak Gupta
相关产品推荐
相关产品推荐

