Python操作列表时报'str' object has no attribute 'append'错误如何排查?
报错原因
- 核心为类型不匹配错误:初始化时
l每个子项的第二个元素是空列表,但首次遇到对应索引的solved_letters条目时,代码直接将l[x[0]][1]赋值为字符串类型的x[1],后续重复出现同索引条目时,会尝试调用字符串不存在的append()方法,触发AttributeError。 - 额外隐患:如果
solved_letters中存在多字符的x[1],首次赋值后l[x[0]][1]存储的是完整字符串,后续遍历拼接逻辑也会和“存储对应索引唯一字母”的需求不符。
解决方法
修改首次赋值的逻辑,不要直接替换初始化好的列表,而是把x[1]的字符逐个加入列表中,修正后的代码如下:
n = [] l = [] for x in range(83): l.append( [-1, [] ] ) print(l[0][1]) for x in solved_letters: if x[0] not in n: n.append(x[0]) l[x[0]][0] = x[0] # 不直接赋值替换列表,将字符加入已有列表 for v in x[1]: if v not in l[x[0]][1]: l[x[0]][1].append(v) else: for v in x[1]: if v not in l[x[0]][1]: l[x[0]][1].append(v)
如果确定x[1]永远是单个字符,也可以简化首次赋值逻辑,直接把字符包装为列表再赋值:
l[x[0]][0], l[x[0]][1] = x[0], [x[1]]
内容的提问来源于stack exchange,提问作者KMG
相关产品推荐
相关产品推荐

