为什么在Python中向列表中追加元素会引发NoneType错误?

13 浏览
0 Comments

为什么在Python中向列表中追加元素会引发NoneType错误?

这个问题已经有了答案:

为什么这些列表方法(append、sort、extend、remove、clear、reverse)返回的是无结果而不是返回结果列表?

如何收集重复计算的结果列表、字典等(或复制一个每个元素都修改的列表)?

这是我的代码:

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。这里到底发生了什么?

admin 更改状态以发布 2023年5月21日
0
0 Comments

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)

0
0 Comments

list.append()是一个原地方法,它不返回任何值(因此默认情况下返回None,因为所有函数调用必须返回某个值,如果某个函数没有显式地返回任何东西,则调用返回None)。

因此,当你将它分配回mList时,它变成了None,在下一个迭代中,当你执行mList.append()时,它会出错,因为mListNone

你应该尝试 -

mList.append(item)


或者你可以简单地在列表推导式中做你想做的事 -

mList = [item for line in text.splitlines() for item in line.split(" ")]

0