2009-09-10 26 views
0

我一直在尋找半天的NoneType。我已經把'print'和dir()全部生成了由t2表示的Object。我在使用'post mortem'後崩潰後查看了數據結構,無處可以找到一個NoneType。 我想知道是否這是由代碼的其他部分(一廂情願的想法)發起的那些錯誤之一,我想知道是否有人認識到這一點? (K2是一個 'INT')Python:無類型錯誤。他們看起來很熟悉

File "C:\Python26\Code\OO.py", line 48, in removeSubtreeFromTree 
    assert getattr(parent, branch) is subtreenode 
TypeError: getattr(): attribute name must be string, not 'NoneType 

File "C:\Python26\Code\OO.py", line 94, in theSwapper 
    st2, p2, b2 = self.removeSubtreeFromTree(t2, k2) 
TypeError: 'NoneType' object is not iterable 

回答

5

NoneTypeNone對象的類型。所以,在第一個錯誤中,branchNone。第二個錯誤更難以診斷,但沒有看到源代碼,但暗示在t2的某處,數據結構並不完全如您所料。

當這個出現對我來說,我通常會發現我忘了來結束我的功能之一了return聲明。沒有顯式返回的函數將返回None

+2

...或者具有多個退出點而不是每個退出點的顯式返回的函數。 –

+0

在所有回覆的幫助下,我發現'NoneType不可迭代'錯誤。我會嘗試一下:除了:in子句並且一直縮進到函數的末尾,所以它會按照您的說法返回None。另一個錯誤很少出現(平均3000次迭代,而且我使用None作爲John Fouhy提到的值,所以我懷疑其中一個偷偷摸摸,感謝所有幫助! –

2

出於某種原因,在斷言線的點,的branch值爲None

如果你的第二個例外是分開的,那麼最有可能發生的事情是在方法調用self.removeSubtreeFromTree()將返回無,而不是一個序列(如元組),所以當Python的嘗試將其解壓到的變量,它失敗。

+0

你明白了。發生了什麼事。 –

1

我同意Managu的說法,很可能你忘記了從函數中返回一個值。我一直這麼做。

作爲另一種可能性,我認爲你正在編寫某種樹數據結構。是否有可能使用None來表示「此節點沒有子節點」,並且您沒有正確處理該情況?

0

另外一個讓我在原地功能,如list.append()(不能使用函數調用,list.append()返回None和改變變量)。

我花了一天半的更好的一部分追逐那個錯誤....