2013-09-10 65 views
2

我在這一行越來越NoneType錯誤,Python的

TypeError: 'NoneType' object is not iterable 

temp, function = findNext(function) 

,而且不知道爲什麼,這是失敗的。我在while循環中使用函數:

while 0 < len(function): 
    … 

但我沒有遍歷它。所有findNext(function)的回報是非常

return 'somestring',function[1:] 

並不能明白爲什麼它認爲我遍歷這些對象之一。

+1

因爲你給出了這麼小的代碼片段,所以很難理解你的問題。請參閱http://stackoverflow.com/help/how-to-ask – msw

回答

1

我在猜測findNext沒有返回任何東西,結果會自動返回None。有點像這樣:

>>> def findNext(function): 
...  if function == 'y': 
...   return 'somestring',function[1:] 
... 
>>> function = 'x' 
>>> print(findNext(function)) 
None 
>>> temp, function = findNext(function) 
Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
TypeError: 'NoneType' object is not iterable 

解決的辦法是總是返回一些東西。

+0

完美!非常感謝你!我忘了把所有的回報放在最後! – Hovestar

0

聲明:

return 'somestring',function[1:] 

實際上返回長度爲2的元組和元組是iterables。這樣寫出這樣的陳述會更加地道:

return ('somestring', function[1:]) 

這使得它的元組性質更加明顯。

+0

好的,我已經在我的代碼中改變了這種情況,但是怎樣才能將元組與返回的變量結合起來呢?我必須說temp = tuple [0] \ n function = tuple [1]? – Hovestar

+0

我不明白這個問題。你在'temp,function = findNext(function)'行中正確地做了「tuple unpacking」,但是我猜測你並沒有一直開箱。很難用你給出的小部分代碼來分辨。 – msw

+0

對不起,我正在避免粘貼整個事情,因爲它有很多重複的if語句,但我可以向你保證拆包是一致的。你有這個問題,我問的是拆包。當它不起作用時,我期待的第一件事是包裝和拆包的一致性。非常感謝你的幫助。 – Hovestar

相關問題