Python代码报错TypeError: expected string or bytes-like object,求解决方法
解决TypeError: expected string or bytes-like object错误的方案
首先咱们拆解下你遇到的问题:你标注的报错行datatocopy = final_keys[word],但从错误提示来看,大概率是代码里某个地方传入了非字符串类型的对象,而非这行本身的问题。我帮你梳理几个排查方向和修复方案:
可能的报错原因
- 错误行号误判:实际报错可能来自下一行
load_ws[i+1,4] = str(datatocopy)。如果load_ws是numpy数组,且它的dtype不是字符串兼容类型(比如是int或float),直接赋值字符串就会触发这个错误。 final_keys的value类型异常:虽然你贴的代码里value都是字符串,但如果实际代码中不小心把某个value改成了列表、数字这类非字符串对象,也会引发问题。word类型意外变更:如果之前的代码里对word做了类型转换,导致它变成非字符串类型,那用它去取final_keys的值也会出问题(不过从你贴的代码看,这种可能性很低)。
修复方案
第一步:规范基础数据
先把final_keys里cinema对应的value末尾多余的逗号去掉(虽然不是报错原因,但能避免后续潜在问题):
final_keys = {'apple':'a,b,c,d,b','bear':'s,q,d,f,d,s,d', 'cinema':'a,q,v,d,s'}
然后单独测试final_keys的取值,确认没问题:
print(final_keys['apple']) # 应该输出 'a,b,c,d,b' print(type(final_keys['apple'])) # 必须是 <class 'str'>
第二步:优化循环并修正赋值逻辑
你的嵌套循环效率偏低且易出错,改成直接遍历dataset2的索引和元素会更清晰:
words = ['apple','bear','cinema'] dataset2 = ['apple','apple','bear','bear','pooh','cinema','cinema'] final_keys = {'apple':'a,b,c,d,b','bear':'s,q,d,f,d,s,d', 'cinema':'a,q,v,d,s'} # 遍历dataset2的每个元素和对应索引 for idx, item in enumerate(dataset2): # 只处理final_keys中存在的元素 if item in final_keys: datatocopy = final_keys[item] # 如果load_ws是numpy数组,需确保它的dtype为字符串类型 # 比如提前初始化:load_ws = np.empty((行数, 列数), dtype=str) load_ws[idx+1, 4] = datatocopy # 已是字符串,无需再转str
第三步:针对numpy数组的特殊处理
如果load_ws是numpy数组,且之前未设置字符串dtype,可以重新初始化数组:
import numpy as np # 假设需要8行5列的结构,根据实际需求调整行数和列数 load_ws = np.empty((8, 5), dtype=str)
验证方法
- 运行上述单独测试
final_keys的代码,确认取值和类型都正常。 - 打印
load_ws.dtype,确认输出是类似<Uxx>(Unicode字符串)或者object。
内容的提问来源于stack exchange,提问作者Sung Yeon Park
相关产品推荐
相关产品推荐

