为什么附加到列表会在Python中引发NoneType错误?

时间:2015-10-17 08:29:20

标签: python list append

这是我的代码:

text="""col1 col2 col3
a 1 $
b 2 @
c 3 &
"""
mList = []
for line in text.splitlines():
    for item in line.split(" "):
        mList = mList.append(item)

这会引发错误'NoneType' object has no attribute 'append'。我已经尝试了其他方法来创建列表并执行此操作,但我得到的最好的是列表转到None。这里发生了什么?

2 个答案:

答案 0 :(得分:2)

list.append未返回(=返回None),只是将该项附加到列表中。

>>> lst = []
>>> return_value_of_append = lst.append('something')
>>> return_value_of_append is None
True

因此,以下行会使mList成为None

mList = mList.append(item)

用以下内容替换上述行解决了问题:

mList.append(item)

答案 1 :(得分:1)

list.append()是一个就地方法,它不会返回任何内容(因此默认情况下会返回<=,因为所有函数调用都必须返回一些值,并且如果某个函数没有显式返回任何内容,则调用返回“None”。

因此,当您将其分配回None时,它会变为mList,而当您执行None时,会在下一次迭代中将其分配为mList.append() { {1}}。

你应该试试 -

mList

或者你可以在列表理解中完成你想要做的事情 -

None