2013-10-28 49 views
0

這裏是我的代碼列表循環,Nonetype錯誤

def printList(stringlist): 
    empty = [] 
    if stringlist is None: 
     print empty 
    else: 
     print stringlist 

def add (stringlist, string): 
    string = [] if string is None else string 
    if stringlist is not None: 
     stringlist.insert(0, string) 
    else: 
     stringlist.append(1) 

它在某種程度上出現「AttributeError的:‘NoneType’對象有沒有屬性‘追加’」

我最初找的代碼是像這樣運行:

>>> myList = None 
>>> printList(myList) 
[] 
>>> for word in ['laundry','homework','cooking','cleaning']: 
myList = add(myList, word) 
printList(myList) 
[laundry] 
[homework, laundry] 
[cooking, homework, laundry] 
[cleaning, cooking, homework, laundry] 
+1

只是要注意,在你需要的輸出分配的「添加」 myList中的返回值,但加不返回任何東西。 – RMcG

回答

0

正如其他人已經指出的那樣,問題是,在你的else情況下,該列表是None。但這只是問題的一部分。相反追加到None的,你必須創建在else情況下,一個新的列表,但你也不得不return名單,因爲你不再編輯就地stringlist

無論如何,您應該(並且似乎期望)返回列表,否則mylist將在您的循環中執行後變爲None

此外,您的行string = [] if string is None else string有點奇怪,因爲如果字符串爲None,則會在列表中插入一個空列表。

我建議你改變你的add方法是這樣的:

def add (stringlist, string): 
    item = [] if string is None else [string] 
    return item + (stringlist or []) 

這將包裹在一個列表中的字符串(或字符串是否None創建一個空列表),並返回從構建一個新的列表該字符串和舊列表(或者如果該列表是None,則爲另一個空列表)。 (a or b相當於a if a else b)。同樣的,你的printList可以簡化爲這樣的:

def printList(stringlist): 
    print stringlist or [] 
1

你試圖調用append方法從None對象:

if stringlist is not None: 
    stringlist.insert(0, string) 
else: 
    # stringlist is None 
    # Well, let's append to it! 
    stringlist.append(1) 
+0

像這是一個必須做出myList中=無 然後我能在「添加」,爲了讓上stringlist.insert運行的代碼做(0,字符串)? – user2926755

1
if stringlist is not None: 
    stringlist.insert(0, string) 
else: 
    stringlist.append(1) 

stringlistNone,你插入的東西,但是當它被None(else子句),要附加什麼東西。您不能追加stringlist,因爲它沒有。

+0

像這是一個必須做出myList中=無 然後我能在「添加」,爲了讓上stringlist.insert運行的代碼做(0,字符串)? – user2926755