2013-07-10 42 views
-1

我索引到一個列表這樣Python的索引到一個列表,並得到一個錯誤,我不應該得到

if first.Barcode == rcv_record[rcv_record_len-1][0]: 
    do stuff 
  • first.Barcode是一個字符串
  • rcv_record的是,像這樣的列表[[],[],[]]像這樣
  • rcv_record_lenlen(rcv_record)

它工作正常,現在它說unsupported opperand - on int and list但1和rcv_record_len都是ints。任何人有任何線索?

編輯我添加到這個列表的方式是通過擴大TMP列表,然後附加到rcv_record

我開始認爲這是一個錯誤或東西。取消註釋和評論之後同樣的錯誤就具有此代碼

if hasattr(first,'Cga_type'): 

它有沒有關係,雖然

而且我使用PDB,並通過代碼加強和上午整數同樣的錯誤,另一條線彈出複製和粘貼有問題的作品,它可以工作,但只要我沒有調試器運行就會中斷。

我已經編輯了

tmp.extend([first.Units_case]) 
tmp.extend([(first.Units_case)/(first.Cost)]) 

和註釋掉哪裏,這是絕不會使用或引用,並一切正常,因爲它應該的代碼。這是爲了證明這個問題不是我目前所擁有的,而是與這個新的片段有關,無論出於何種原因都會破壞一切。這些添加後,我得到奇怪的opperand int列表錯誤。

這是野獸,這是我知道的殘骸,但這個項目只是在我的膝蓋上。

if Type == 'burn rate': 
     RcvRecords = [] 
     RmvRecords = []  
     while broken_item_len > 0: 
      if broken_item[broken_item_len-1][0] == 'Chemicals': 
       RcvRecords.extend(ChemicalRecord.objects.filter(Date__range=[From,To]).filter(Barcode=Chemicals.objects.get(id=broken_item[broken_item_len-1][1]).Barcode).filter(Action='Receiving').filter(Valid=True)) 
       RmvRecords.extend(ChemicalRecord.objects.filter(Date__range=[From,To]).filter(Barcode=Chemicals.objects.get(id=broken_item[broken_item_len-1][1]).Barcode).filter(Action='Removing').filter(Valid=True)) 
      if broken_item[broken_item_len-1][0] == 'Supplies': 
       RcvRecords.extend(SupplyRecord.objects.filter(Date__range=[From,To]).filter(Barcode=Supplies.objects.get(id=broken_item[broken_item_len-1][1]).Barcode).filter(Action='Receiving').filter(Valid=True)) 
       RmvRecords.extend(SupplyRecord.objects.filter(Date__range=[From,To]).filter(Barcode=Supplies.objects.get(id=broken_item[broken_item_len-1][1]).Barcode).filter(Action='Removing').filter(Valid=True)) 
      if broken_item[broken_item_len-1][0] == 'Gasses': 
       RcvRecords.extend(GasRecord.objects.filter(Date__range=[From,To]).filter(Barcode=Gasses.objects.get(id=broken_item[broken_item_len-1][1]).Barcode).filter(Action='Receiving').filter(Cga_type=Gasses.objects.get(id=broken_item[broken_item_len-1][1]).Cga_type).filter(Size=Gasses.objects.get(id=broken_item[broken_item_len-1][1]).Size).filter(Valid=True)) 
       RmvRecords.extend(GasRecord.objects.filter(Date__range=[From,To]).filter(Barcode=Gasses.objects.get(id=broken_item[broken_item_len-1][1]).Barcode).filter(Action='Removing').filter(Cga_type=Gasses.objects.get(id=broken_item[broken_item_len-1][1]).Cga_type).filter(Size=Gasses.objects.get(id=broken_item[broken_item_len-1][1]).Size).filter(Valid=True)) 
      broken_item_len = broken_item_len - 1 
     RcvRecords_len = len(RcvRecords) 
     RmvRecords_len = len(RmvRecords) 
     tmp_RcvRecords = RcvRecords 
     tmp_RcvRecords_len = len(tmp_RcvRecords) 
     tmp_RmvRecords = RmvRecords 
     rcv_record = [] 
     tmp = [] 
     debugg = '' 
     #import pdb; pdb.set_trace() 
     while tmp_RcvRecords_len > 0: 
      if tmp_RcvRecords: 
       first = tmp_RcvRecords.pop() 
       tmp_RcvRecords_len = len(tmp_RcvRecords) 
       debugg = 'pop' 
       #import pdb; pdb.set_trace() 
      if rcv_record == []: 
       tmp.append(first.Barcode) 
       debugg = 'check barcode' 
       #import pdb; pdb.set_trace() 
       if hasattr(first,'Cga_type'): 
        tmp.extend(first.Cga_type) 
        tmp.extend(first.Size) 
        debugg = 'cga exists' 
        #import pdb; pdb.set_trace() 
       else: 
        tmp.extend(['','']) 
       tmp.extend([first.Cost*first.Qty]) 

       tmp.extend([first.Qty]) 

       tmp.extend([first.Name]) 
       #tmp.extend([first.Units_case]) << THIS PIECE 
       #tmp.extend([(first.Units_case)/(first.Cost)]) << THIS PIECE 
       import pdb; pdb.set_trace() 
       rcv_record.append(tmp) 
       tmp = [] 
       debugg = 'herp'      
      else: 
        rcv_record_len = len(rcv_record) 
        while first != []: 
         import pdb; pdb.set_trace() 
         if first.Barcode == rcv_record[rcv_record_len-1][0]: 
          import pdb; pdb.set_trace() 
          if hasattr(first,'Cga_type'): 
           if first.Cga_type == rcv_record[rcv_record_len-1][1]: 
            if first.Size == rcv_record[rcv_record_len-1][2]: 
             rcv_record[rcv_record_len-1][3] = rcv_record[rcv_record_len-1][3]+(first.Cost*first.Qty)        
             rcv_record[rcv_record_len-1][4] = rcv_record[rcv_record_len-1][4]+first.Qty##edited this 
             #if rcv_record[rcv_record_len-1][6] <> first.Units_case or rcv_record[rcv_record-1][3] <> first.Cost: << THIS PIECE 
              #rcv_record[rcv_record_len-1][7] = (rcv_record[rcv_record_len-1][7]+(first.Units_case/first.Cost))/2.0##edited this<< THIS PIECE 
             #rcv_record_len = len(rcv_record) 
             debugg = 'first' 
             import pdb; pdb.set_trace() 
             first =[]           
            else: 
             tmp = [first.Barcode,first.Cga_type,first.Size,first.Qty*first.Cost,first.Qty,first.Name]#,first.Units_case,(first.Units_case/first.Cost)]<< THIS PIECE AFTER COMMENTS 
             rcv_record.append(tmp) 
             #rcv_record_len = len(rcv_record) 
             debugg = 'second' 
             import pdb; pdb.set_trace() 
             first = []           
           else: 
            import pdb; pdb.set_trace() 
            tmp = [first.Barcode,first.Cga_type,first.Size,first.Qty*first.Cost,first.Qty,first.Name]#,first.Units_case,(first.Units_case/first.Cost)]  << THIS PIECE AFTER COMMENTS 
            rcv_record.append(tmp) 
            #rcv_record_len = len(rcv_record) 
            first = [] 
            debugg = 'third' 
            import pdb; pdb.set_trace() 

          else: 
           rcv_record[rcv_record_len-1][3] = rcv_record[rcv_record_len-1][3] + (first.Qty*first.Cost) 
           rcv_record[rcv_record_len-1][4] = rcv_record[rcv_record_len-1][4] + first.Qty ## edited this here 
           #if rcv_record[rcv_record_len-1][6] <> first.Units_case or rcv_record[rcv_record-1][3] <> first.Cost: << THIS PIECE 
              #rcv_record[rcv_record_len-1][7] = (rcv_record[rcv_record_len-1][7]+(first.Units_case/first.Cost))/2.0##edited this << THIS PIECE 
           debugg = '4th' 
           import pdb; pdb.set_trace() 
           first = [] 

         else: 
          if hasattr(first,'Cga_type'): 
           tmp = [first.Barcode,first.Cga_type,first.Size,first.Cost*first.Qty,first.Qty,first.Name]#,first.Units_case,(first.Units_case/first.Cost)] << THIS PIECE 
           rcv_record.append(tmp) 
           #rcv_record_len = len(rcv_record) 
           debugg = '5th' 
           import pdb; pdb.set_trace() 
           first = [] 
          else: 
           tmp =[first.Barcode,'','',first.Cost*first.Qty,first.Qty,first.Name]#,first.Units_case,(first.Units_case/first.Cost)] << THIS PIECE 
           rcv_record.append(tmp) 
           #rcv_record_len=len(rcv_record) 
           debugg = '6th' 
           import pdb; pdb.set_trace() 
           first = [] 
         rcv_record_len = rcv_record_len - 1 

如果你做一個CTRL - f有關這一點,你會發現所有的製造問題

+0

你能提供更多的周邊代碼嗎?如果你在那條線上得到這個錯誤,那麼這個變量絕對不是你認爲的那種類型。 –

+0

同上。 rcv_record_len在哪裏定義和rcv_record? –

+0

在'if'之前打印'rcv_record_len' – Ofiris

回答

1

的問題是,你有錯字每個已標記爲有問題的線路:

if rcv_record[rcv_record_len-1][6] <> first.Units_case or rcv_record[rcv_record-1][3] <> first.Cost: << THIS PIECE 

注意最後的索引在那裏,是rcv_record - 1,其中rcv_record是一個列表。

+0

哈,去圖。我將不得不重新審視一下,我只是評論了這個功能並與之一起運行。這是一個可以肯定的問題,但如果它修復了這個錯誤,我肯定會給你信任。 – user2482595

2

井段,這是難以調試,因爲你還沒有發佈相關的一段代碼,而是從錯誤信息我可以告訴你,出於某種原因rcv_record_len是一個列表。發佈更多的代碼,我可以給出更詳細的答案。甚至可能解決你的問題。

一般來說,如果你想找出什麼類型的對象是這樣你就可以避免這樣的問題,在未來,你可以調用這樣的事情:

type(rcv_record_len) 
>>> <type 'list'> 

或者,如果你想成爲一個更專業一點吧你應該叫isinstance

isinstance(rcv_record_len, list) 
>>> True 
+0

是的,我發現它是在周圍的代碼的問題,但我所做的是有效和猶太教。將張貼代碼。 – user2482595

+1

@ user2482595叫我瘋了,但有一件事告訴我,當你有這種錯誤時,你所做的不是很清楚,而且定義上無效。 –

+0

不,我可以向你保證它工作得很好,直到我將最後一項擴展到列表中。當我編輯我的帖子時,如果我註釋掉了一行代碼,所有的代碼都很好的取消了註釋,並且它隨機地打破了。 – user2482595