2013-04-26 2 views
0

Я продолжаю получать эту ошибку 'list' object has no attribute 'priority', и я не знаю, как ее исправить.Python получает странную ошибку

Вот часть моего кода, я не могу показать все это здесь, как его мой проект:

def Tree(self): 

    while len(self.heap) > 0: 
     leftChild= self.heap.pop(0) 
     rightChild= self.heap.pop(0) 
     a = leftChild.priority + rightChild.priority 
     parent = [(leftChild.item + rightChild.item, a)] 
     print parent 
     #self.heap.insert(0, parent) 
    #return self.heap[0] 

Так в основном у меня есть список очереди приоритетов и я прохожу каждые элементы кучи, которая представляет собой список. Затем я вынимаю каждый элемент попсом, и каждый из leftChild и rightChild должен иметь, например .: [("c", 0.1231)], он отлично работает и печатает родителя, пока не запустит функцию вставки, отображающую сообщение об ошибке. Кто-нибудь знает, что я сделал неправильно?

+0

'left' или' leftChild'? Вам действительно нужно задуматься. – paxdiablo

+0

its leftchild and rightchild –

+1

Откуда вышли 'leftChild' и' rightChild'? – mgilson

ответ

1

Если он жалуется на список, не имеющий атрибута priority, то это безопасная ставка, что то, что выходит из кучи (например, в leftChild), является списком, а не «узлом».

Убедитесь, что вы вставляете эти узлы из исходного списка в вашей куче что-то вроде:

self.heap.insert (myList[4])  # an item in the list 

, а не:

self.heap.insert (myList[4:5]) # a sublist of the list. 

Вы можете попробовать печати type(leftChild), чтобы выяснить, что фактический тип в соответствии со следующей стенограммой:

$ python 
Python 2.6.5 (r265:79063, Jun 12 2010, 17:07:01) 
[GCC 4.3.4 20090804 (release) 1] on cygwin 
Type "help", "copyright", "credits" or "license" for more information. 
>>> x = [1,2,3,4,5,6,7] 

>>> x1 = x[4] 

>>> x2 = x[4:5] 

>>> x1 
5 

>>> x2 
[5] 

>>> type(x1) 
<type 'int'> 

>>> type(x2) 
<type 'list'> 
+0

, но я не понимаю, почему он печатает первого родителя, тогда он говорит об ошибке. Итак, в родительском элементе leftChild.priority работает, но не в функции insert? –

+0

, когда я печатаю его в этом выпуске

+0

@TommyNgo, ну, вот оно. Вещи в куче - это списки, а не «узлы». Вам нужно найти код, который их вставляет и исправить. – paxdiablo

Смежные вопросы