在Python Shell中,我输入了:
aList = ['a', 'b', 'c', 'd']
for i in aList:
print(i)
得到了
a
b
c
d
但是当我尝试时:
aList = ['a', 'b', 'c', 'd']
aList = aList.append('e')
for i in aList:
print(i)
得到了
Traceback (most recent call last):
File "<pyshell#22>", line 1, in <module>
for i in aList:
TypeError: 'NoneType' object is not iterable
有谁知道发生了什么事?我该如何解决/绕过它?
答案 0 :(得分:40)
list.append
是一种修改现有列表的方法。它不返回新列表 - 它返回None
,就像大多数修改列表的方法一样。只需执行aList.append('e')
,您的列表就会附加元素。
答案 1 :(得分:3)
删除第二行aList = aList.append('e')
并仅使用aList.append("e")
,这应该可以摆脱这个问题。
答案 2 :(得分:3)
一般来说,你想要的是接受的答案。但是如果你想要覆盖值并创建一个新列表的行为(在某些情况下这是合理的^),你可以做的是使用&#34; splat运算符&#34;,也称为列表解包:< / p>
notify()
或者,如果您需要支持python 2,请使用owns NumberGenerator
运算符:
aList = [*aList, 'e']
#: ['a', 'b', 'c', 'd', 'e']
^在许多情况下,您希望避免使用+
进行变异的副作用。首先,想象一下你想要将某些东西附加到你作为函数参数的列表中。使用该功能的人可能并不期望他们提供的列表会被更改。使用这样的内容可以使您的函数"pure"保持"side effects"。
答案 3 :(得分:0)
有时当您忘记在另一个函数的末尾返回一个函数并传递一个空列表(解释为 NoneType)时,会出现此错误。
从此:
def func1():
...
func2(empty_list)
def func2(list):
...
# use list here but it interpreted as NoneType
为此:
def func1():
...
return func2(empty_list)
def func2(list):
...
# use list here, it will be interpreted as an empty List