Python加载GMM模型报TypeError: a bytes-like object is required错误如何解决
错误原因
- 文件打开模式错误:
pickle.load()处理的是二进制序列化数据,要求读取的是字节流,你使用文本模式'r'打开文件,返回的是字符串格式的文本流,不符合接口要求,直接触发类型报错。 - 变量名笔误:生成
gmmFiles的列表推导式中,遍历的临时变量是fname,但判断后缀时误用了未定义的name变量,这行代码运行时会直接抛出NameError。
修复方案
把文件打开模式改为二进制读模式'rb',同时修正变量名笔误即可,修复后的完整代码如下:
import os import pickle path = "speaker_models/" gmmFiles = [os.path.join(path, fname) for fname in os.listdir(path) if fname.endswith('.gmm')] models = [pickle.load(open(fname, 'rb')) for fname in gmmFiles]
补充优化建议
建议使用with上下文管理器打开文件,避免资源泄漏,写法如下:
models = [] for fname in gmmFiles: with open(fname, 'rb') as f: models.append(pickle.load(f))
内容的提问来源于stack exchange,提问作者Yuri
相关产品推荐
相关产品推荐

