2016-10-18 4 views
0

を修正する方法がわからない、私は他の場所でサイトにこのコードを見つけましたが、私は同じエラーメッセージが出続ける何らかの理由:は、インデックスエラーが発生している私は

products[row[0]] = [row[1], row[2], row[3]] 
IndexError: list index out of range. 

私はこれを修正する方法がわかりませんよどんな助けもありがとう、ありがとう。

これはコードです:

MAX_FIELD_LEN = 8 

def main(): 
    products = {} 
    product_location = {} 
    location = 0 
    # This is the file directory being made. 
    with open('stockfile.txt', 'r+') as f: 
     # This is my file being opened. 

     for line in f: 
      # keep track of each products location in file to overwrite with New_Stock 
      product_location[line.split(',')[0]] = location 
      location += len(line) 
      # Need to strip to eliminate end of line character 
      line = line[:-1] 
      # This gets rid of the character which shows and end of line '\n' 
      row = line.split(',') 
      # The row is split by the comma 
      products[row[0]] = [row[1], row[2], row[3]] 
      # The products are equal to row 1 and row 2 and row 3. The GTIN is going to take the values of the product and price so GTIN 12345678 is going to correspond to Fridge and 1. 

     print(products) 
     total = 0 

     while True: 
      GTIN = input('Please input GTIN: ') 
      # To terminate user input, they just need to press ENTER 
      if GTIN == "": 
       break 
      if (GTIN not in products): 
       print('Sorry your code was invalid, try again:') 
       break 

      row = products[GTIN] 
      description, value, stock = row 
      print('Stock data: ') 
      print('GTIN \t\tDesc. \t\tStock \t\tValue') 
      print(GTIN,'\t',description,'\t', stock, '\t', value) 

      quantity = input('Please also input your quantity required: ') 
      row[2] = str(int(stock) - int(quantity)) 
      product_total = int(quantity) * int(value) 
      for i in range(len(row)): 
       row[i] = row[i].rjust(MAX_FIELD_LEN) 
      New_Stock = GTIN.rjust(MAX_FIELD_LEN) + ',' + ','.join(row) + '\n' 
      #print(New_Stock, len(New_Stock)) 
      f.seek(product_location[GTIN]) 
      f.write(New_Stock) 
      print('You bought: {0} {1} \nCost: {2}'.format(GTIN, description, product_total)) 

      total = total + product_total 
     f.close() 
     print('Total of the order is £%s' % total) 

main() 
+0

あなただけの問題の関連情報の代わりに、全体のコードが含まれている場合には役立つだろう。あなたがそれらに3つの以上のカンマを持っていない、あなたのファイルの行を持っているよう –

+5

が鳴ります。おそらくあなたは*空の行を持っていますか? –

+1

私の推測では、stockfile.txtが3未満「」文字の行が含まれていないだろう。あなたも入力を提供できますか? – Binus

答えて

0

「」少なくとも、あなたのファイルの1行が3以上を持っていない、あなたの入力ファイル「stockfile.txt」をご確認ください。または、データ間に空白行があります。

+0

うんだけの問題での出力を印刷してくださいファイルには、何らかの理由で、それはすべての周りの変更が、その今、すべての良い、感謝:) –

関連する問題