这是我的代码
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]
答案 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
之后None
将myList = 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