Решено: проблема возникает только с PythonWin. Я прогнал все через оболочку Python IDLE, и все заработало. Должна быть ошибка в PythonWin, а не в самом коде.
Я не могу понять, почему следующий код дает мне TypeError: 'type' object is not iterable
pastebin: http://pastebin.com/VFZYY4v0
def genList(self):
#recursively generates a sorted list of child node values
numList = []
if self.leftChild != 'none':
numList.extend(self.leftChild.genList()) #error
numList.extend(list((self.Value,)))
if self.rightChild != 'none':
numList.extend(self.rightChild.genList()) #error
return numList
код, добавляющий дочерние узлы (работает корректно)
def addChild(self, child):
#add a child node. working
if child.Value < self.Value:
if self.leftChild == 'none':
self.leftChild = child
child.parent = self
else:
self.leftChild.addChild(child)
elif child.Value > self.Value:
if self.rightChild == 'none':
self.rightChild = child
child.parent = self
else:
self.rightChild.addChild(child)
Любая помощь будет оценена по достоинству.
Полный сеанс интерпретатора: ››› импортировать BinTreeNode как BTN
››› node1 = BTN.BinaryTreeNode(5)
››› node2 = BTN.BinaryTreeNode(2)
››› node3 = BTN.BinaryTreeNode(12)
››› node3 = BTN.BinaryTreeNode(16)
››› node4 = BTN.BinaryTreeNode(4)
››› node5 = BTN.BinaryTreeNode(13 )
››› node1.addChild(node2)
››› node1.addChild(node3)
››› node1.addChild(node4)
››› node1.addChild (node5)
››› node4.genList()
‹class 'list'›
››› node1.genList()
Traceback (последний последний вызов):< br /> Файл "‹interactive input›", строка 1, в ‹module›
Файл "C:...\python\BinTreeNode.py", строка 47, в genList
numList.extend( self.leftChild.genList()) #error
Файл "C:...\python\BinTreeNode.py", строка 52, в genList
TypeError: 'type' object is not iterable
>
numList.extend()
всегда будет получать экземпляр списка. У меня такое чувство, что это можно решить, только увидев весь код: -/ - person jdi   schedule 01.12.2012numList.extend(list((self.Value,)))
кажется, что это должно быть простоnumList.append(self.Value)
... (это не ваша проблема, но это было бы менее запутанно) -- Вы случайно не затенили встроенныйlist
, не так ли? - person mgilson   schedule 01.12.2012a = []; a.extend(list((1,))); print(a)
дает вам[1]
, а не[[1]]
- person mgilson   schedule 01.12.2012genList()
нет ничего, что указывало бы на то, что вы возвращаете тип вместо экземпляра списка. Тем не менее ваш вывод показывает, чтоgenList()
возвращает тип класса. - person jdi   schedule 01.12.2012