-1

このようなリストにインデックスを付けています

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 listbut 1 とrcv_record_len表示され、両方とも int です。誰にも手がかりはありますか?

このリストに追加する方法は、tmp リストを拡張してから rcv_record に追加することです。

tmp.extend([first.Cost*first.Qty])
tmp.extend([first.Qty])
tmp.extend([first.Name])
tmp.extend([first.Units_case])
#tmp.extend([(first.Units_case)/(first.Cost)]) << if this is not commented werid stuff happens
import pdb; pdb.set_trace()
rcv_record.append(tmp)           
rcv_record_len = len(rcv_record)
while first != []:
    import pdb; pdb.set_trace()
    if first.Barcode == rcv_record[rcv_record_len-1][0]:

バグか何かがあると思い始めています。コメントを外してコメントした後、このコードを持つ別の行に同じエラーが表示されます

if hasattr(first,'Cga_type'):

ただし、ints同じエラーとは何の関係もありません

また、pdbを使用してコードをステップ実行し、問題のある部分をコピーして貼り付けていますが、デバッガーなしで実行するとすぐに壊れます。

私は編集しました

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

これが使用または参照されているコードをコメントアウトし、すべてが正常に機能します。これは、問題が私が現在持っているものではなく、何らかの理由ですべてを壊すこの新しいスニペットにあることを証明するためです. これらが追加された後、奇妙なオペランド 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を実行すると、問題を引き起こすすべてのスニペットが見つかります

4

2 に答える 2

2

関連するコードを投稿していないため、デバッグが困難ですが、エラー メッセージから、何らかの理由rcv_record_lenでリストになっていることがわかります。あなたのコードをもっと投稿してください。より詳細な回答を提供できます。多分あなたの問題を解決することさえあります。

一般に、将来このような問題を回避できるように、オブジェクトのタイプを把握したい場合は、次のように呼び出すことができます。

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

または、それについてもう少し専門的になりたい場合は、電話する必要がありますisinstance

isinstance(rcv_record_len, list)
>>> True
于 2013-07-10T14:42:24.903 に答える
1

問題は、問題としてマークした各行にタイプミスがあることです。

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

そこにある最後のインデックスに注意してください、 is rcv_record - 1rcv_recordはリストです。

于 2013-07-11T12:20:29.200 に答える