我試圖使用單詞列表中的單詞創建單詞列表。例如:從另一個列表的元素中創建一個列表會將它變成一個NoneType
>>> stuff = ['this', 'is', 'a', 'test']
>>> newlist = [stuff[0]]
>>> newlist
['this']
不過,我遇到了我的代碼中的一個問題,我嘗試這樣做,並且它變成新的列表到NoneType對象。
這是引發錯誤的代碼:
markov_sentence = [stuff[0]]
for i in range(100):
if len(markov_sentence) > 0:
if words_d[markov_sentence[-1]] != []:
newword = random.choice(words_d[markov_sentence[-1]])
markov_sentence = markov_sentence.append(newword)
else:
break
return markov_sentence
變量「東西」是從用戶輸入字符串取單詞的列表。 「words_d」是先前創建一個字典,它並不重要,現在:
stuff = input("Input a series of sentences: ")
stuff = stuff.split()[:-1] #this is here because there was an empty string at the end
當我嘗試運行該程序,我得到這個:
Input a series of sentences: this is a test this should work
Traceback (most recent call last):
File "/u/sbiederm/markov.py", line 32, in <module>
main()
File "/u/sbiederm/markov.py", line 29, in main
print(markov(stuff))
File "/u/sbiederm/markov.py", line 18, in markov
if len(markov_sentence) > 0:
TypeError: object of type 'NoneType' has no len()
有人能向我解釋爲什麼列表正在變成一個NoneType?我嘗試了各種方法來解決這個問題,但我無法弄清楚。
編輯:
我已經試過這一點,得到了同樣的錯誤:
markov_sentence = []
markov_sentence.append(stuff[0])
Traceback (most recent call last):
File "C:\Python34\markov.py", line 33, in <module>
main()
File "C:\Python34\markov.py", line 30, in main
print(markov(stuff.split()))
File "C:\Python34\markov.py", line 20, in markov
if len(markov_sentence) > 0:
TypeError: object of type 'NoneType' has no len()
我已經看過其他問題,他們沒有解釋爲什麼這是在我的代碼發生。我知道.append()返回None。這不是這裏發生的事情。
這是不是重複-_-我看着在其他問題上,他們不回答爲什麼會發生這種情況。 – Steven 2014-11-06 21:33:16
'markov_sentence = markov_sentence.append(newword)'正是重複的內容,如果你有不同的錯誤,你應該問另一個問題,如果你正在檢查一個len的錯誤,沒有辦法得到一個NoneType錯誤列表甚至是一個空列表的長度爲 – 2014-11-06 21:41:45
我明白了。我忘了改變循環內的部分。我沒有注意到,直到你指出。我認爲這個問題是另一回事。 – Steven 2014-11-06 21:46:08