2010-10-01 55 views
13

在Python Shell中,我進入:追加變成我的名單NoneType

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 

有誰知道發生了什麼事?我如何修復/解決它?

回答

25

list.append是一種修改現有列表的方法。它不會返回一個新列表 - 它返回None,就像修改列表的大多數方法一樣。只需執行aList.append('e'),您的列表將會添加元素。

+0

而且由於它不返回任何內容,所以如果你確實做了這個任務,那麼你將List設置爲None,這就是爲什麼你會得到這個錯誤。 – kindall 2010-10-01 15:48:04

+0

所有函數都返回:) – 2010-10-01 15:48:58

+1

true - 但有時候* something *是'None'。但是「無」真的是什麼?我頭疼! – 2010-10-01 15:58:14

2

刪除你的第二行aList = aList.append('e')並只使用aList.append("e"),這應該擺脫這個問題。

0

一般來說,你想要的是被接受的答案。但是如果你想覆蓋的值,並創建一個新的列表(在某些情況下,^合理)的行爲,你可以做的反而是使用「圖示操作」,也被​​稱爲列表拆包:

aList = [*aList, 'e'] 
#: ['a', 'b', 'c', 'd', 'e'] 

或者,如果您需要支持Python 2中,使用+操作:

aList = aList + ['e'] 
#: ['a', 'b', 'c', 'd', 'e'] 

^還有要避免.append()突變的副作用很多情況下。首先,想象一下你想追加一些你已經作爲函數參數的列表。無論誰使用該功能,可能都不會期望他們提供的列表將會改變。使用類似這樣的功能可以讓您的功能"pure"不需要"side effects"