Python - AttributeError: 'str' object has no attribute 'append'

Python - AttributeError: 'str' object has no attribute 'append'

当我尝试 运行 此代码行 "encoded.append("i")":

时,我一直收到此错误

AttributeError: 'str' 对象没有属性 'append'

我不明白为什么列表不附加字符串。我确定问题很简单谢谢你的帮助。

def encode(code, msg):
    '''Encrypts a message, msg, using the substitutions defined in the
    dictionary, code'''
    msg = list(msg)
    encoded = []
    for i in msg:
        if i in code.keys():
            i = code[i]
            encoded.append(i)
        else:
            encoded.append(i)
            encoded = ''.join(encoded)
    return encoded

您在此处将编码设置为字符串:

encoded = ''.join(encoded)

当然它没有属性'append'。

由于您是在一个循环迭代中执行此操作,因此在下一次迭代中您使用的是 str 而不是 list...

您的字符串转换行在 else 子句下。从条件和 for 循环中取出它,这样它就是对 encoded 所做的最后一件事。就目前而言,您正在 for 循环中途转换为字符串:

def encode(code, msg):
'''Encrypts a message, msg, using the substitutions defined in the
dictionary, code'''
msg = list(msg)
encoded = []
for i in msg:
    if i in code.keys():
        i = code[i]
        encoded.append(i)
    else:
        encoded.append(i)

# after all appends and outside for loop
encoded = ''.join(encoded)
return encoded
>>> encoded =["d","4"]
>>> encoded="".join(encoded)
>>> print (type(encoded))
<class 'str'> #It's not a list anymore, you converted it to string.
>>> encoded =["d","4",4] # 4 here as integer
>>> encoded="".join(encoded)
Traceback (most recent call last):
  File "<pyshell#4>", line 1, in <module>
    encoded="".join(encoded)
TypeError: sequence item 2: expected str instance, int found
>>> 

如您所见,您的列表已在此处 "".join(encoded) 转换为字符串。 append 是列表的方法,不是字符串。这就是你得到那个错误的原因。另外,如果您的 encoded 列表有一个整数元素,您将看到 TypeError,因为您不能对整数使用 join 方法。最好再次检查所有代码。

您收到错误是因为您的 else 语句中的第二个表达式。

    ''.join(encoded) returns a string that gets assigned to encoded

因此编码现在是字符串类型。 在第二个循环中,您在任一 if/else 语句中都有 .append(i) 方法,它只能应用于列表而不是字符串。

您的 .join() 方法应该出现在 for 循环之后 return 它之前。

如果上面的文字显示不正确,我深表歉意。这是我的第一个 post,我仍在努力弄清楚它是如何工作的。