循环列表,非类型错误

时间:2013-10-28 04:49:15

标签: python-2.7

这是我的代码

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'对象没有属性'append'”

我原本在寻找像这样运行的代码:

>>> 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]

3 个答案:

答案 0 :(得分: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) 

答案 1 :(得分:1)

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

stringlist不是None时,您会插入一些东西,但是当它是None(else子句)时,您正在向它添加内容。您无法向stringlist附加内容,因为它是无。

答案 2 :(得分:0)

正如其他人已经指出的那样,问题是在else案例中,列表为None。但这只是问题的一部分。您需要在None案例中创建新列表,而不是追加到else,但是您还必须return列表,因为您不再编辑stringlist就地。

您应该(并且似乎期望)仍然会返回列表,因为在您的循环中执行mylist之后NonemyList = add(myList, word)

此外,您的行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,则创建一个空列表)并返回从该字符串和旧列表构建的新列表(如果该列表为{,则返回另一个空列表) {1}})。 (None相当于a or b)。同样,您的a if a else b可以简化为:

printList