2014-11-06 65 views
0

我試圖使用單詞列表中的單詞創建單詞列表。例如:從另一個列表的元素中創建一個列表會將它變成一個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。這不是這裏發生的事情。

+0

這是不是重複-_-我看着在其他問題上,他們不回答爲什麼會發生這種情況。 – Steven 2014-11-06 21:33:16

+0

'markov_sentence = markov_sentence.append(newword)'正是重複的內容,如果你有不同的錯誤,你應該問另一個問題,如果你正在檢查一個len的錯誤,沒有辦法得到一個NoneType錯誤列表甚至是一個空列表的長度爲 – 2014-11-06 21:41:45

+0

我明白了。我忘了改變循環內的部分。我沒有注意到,直到你指出。我認爲這個問題是另一回事。 – Steven 2014-11-06 21:46:08

回答

3

list.append方法就地變異列表並返回None。這意味着,你需要不分配它來調用它自己的行markov_sentence

newword = random.choice(words_d[markov_sentence[-1]]) 
markov_sentence.append(newword) 

否則,markov_sentence將被分配到None

>>> lst = [1, 2, 3] 
>>> print(lst) 
[1, 2, 3] 
>>> lst = [1, 2, 3].append(4) 
>>> print(lst) 
None 
>>> 
+0

我嘗試這樣做: markov_sentence = [] markov_sentence.append(東西[0]) 和我得到了同樣的錯誤。 – Steven 2014-11-06 21:11:54

+0

@Steven - 你確定它是完全相同的錯誤,而不是一個不同的?回溯是什麼意思? – iCodez 2014-11-06 21:17:47

+0

我在最後在問題中添加了錯誤消息。他們是一樣的。 – Steven 2014-11-06 21:32:30

相關問題