You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

保存对象到Pickle时出现TypeError: write()参数需为str而非bytes如何解决?

问题原因

你出现这个报错的核心原因是文件打开模式错误,和你的特征、标签格式没有任何关系,你不需要修改训练数据的格式。

  • 你单独写的open('level1_classifier.pk', 'wb')是无效操作:既没有赋值给变量,也没有手动关闭,执行完就直接被回收了,不会对后续操作产生任何影响
  • 后续with open ('level1_classifier.pk') as l1clf用的是Python open函数的默认模式rt(只读文本模式),文本模式下只能写入字符串类型数据,而pickle.dump序列化Python对象时输出的是bytes字节流,两种类型不匹配就触发了类型错误。
修正后代码
import pandas as pd
from sklearn.naive_bayes import GaussianNB
import pickle

df = {'Description':[100,200,300,400,500],'Level_1':[1,2,3,4,5]}
df = pd.DataFrame(df,columns=['Description','Level_1'])

x = df[['Description']]
y = df['Level_1']

nb = GaussianNB()
nb.fit(x,y)

# 直接在with语句里指定二进制写入模式wb即可
with open('level1_classifier.pk', 'wb') as l1clf:
    pickle.dump(nb, l1clf)
补充说明

如果后续需要加载这个pickle模型,也要对应使用二进制读模式rb:

with open('level1_classifier.pk', 'rb') as l1clf:
    loaded_model = pickle.load(l1clf)

内容的提问来源于stack exchange,提问作者angeliquelinde

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.13 06:54:02