title: Python 3 Index out of range error
body: <p>I have the following piece of code executing in a postgresql server.</p>
  
  <pre><code>from datetime import datetime
  
  now = str(datetime.now(None))
  procurementinsertqueries=[]
  priceupdatequeries = []
  inventoryupdatequeries=[]
  ptrcode = -1
  debugcode=""
  
  try:
      unpbatches=[]
      query = "select distinct(fk_procurementbatch_code) from newprocurementlist"
      proclistresult = plpy.execute(query)
  
      for rec in proclistresult:
          unpbatches.append(rec["fk_procurementbatch_code"])
  
      for batchcode in unpbatches:
          ptrcode=-1
          query = "select procurementtransaction_code from procurement where fk_procurementbatch_code="+str(batchcode)+" order by procurementtransaction_code desc limit 1"
          ptrcoderesult = plpy.execute(query)
  
          if len(ptrcoderesult)==0:
              ptrcode=0
          else:
              ptrcode=ptrcoderesult[0]["procurementtransaction_code"]
  
          query = "select * from newprocurementlist where fk_procurementbatch_code="+str(batchcode)
          newproclistresult = plpy.execute(query)
  
          for r in newproclistresult: 
              ptrcode+=1
              _bcode = str(r["fk_procurementbatch_code"])
              _pref = str(r["fk_product_ref"])
              _up = str(r["unitsprocured"])
              _tp = str(r["totalprice"])
              _cp = str(r["costprice"])
              _sp = str(r["sellingprice"])
              _mrp = str(r["mrp"])
              _trcode = str(ptrcode)
              procurementinsertqueries.append("insert into procurement values("+_bcode+","+_pref+","+_up+","+_tp+","+_cp+","+_sp+","+_mrp+","+_trcode+")")
              priceupdatequeries.append("insert into productpriceupdatelist values("+_pref+")")
              _aunits = 0.0
              _newunits = 0.0
              query="select unitsavailable from inventory where fk_product_ref="+_pref
              au = -1
              au = plpy.execute(query)
              _aunits=float(au[0]["unitsavailable"])
              _newunits = _aunits+float(r["unitsprocured"])
              inventoryupdatequeries.append("update inventory set unitsavailable="+str(_newunits)+" where fk_product_ref="+_pref)
              debugcode+="--Completed--"
          debugcode+="---Loop completed---"   
  
  except Exception as e:
      plpy.execute("insert into log values(\'"+now+"\')")
      raise plpy.error("Error generating insert queries--&gt;"+str(e)+"Debug is "+debugcode)
  
  try:
      with plpy.subtransaction():
          for qry in procurementinsertqueries:
              plpy.execute(qry)
          for qry in priceupdatequeries:
              plpy.execute(qry)   
          for qry in inventoryupdatequeries:
              plpy.execute(qry)
  except Exception as e:
      plpy.execute("insert into log values(\'"+now+": Error executing insert queries\')")
      raise plpy.error("Error executing procurement updates. There could be loss of data.Please review database error log. --&gt;"+str(e))
  
  try:
      plpy.execute("delete from newprocurementlist")
  except Exception as e:
      plpy.execute("insert into log values(\'"+now+": Error deleting new procurement list table after successful updates\')")
      raise plpy.error("Error deleting completed procurement list. There could be duplication of data. Review error log file--&gt;"+str(e))
  
  try:
      plpy.execute("select product_price_update_process()")
  except Exception as e:
      raise plpy.error("Error updating prices. "+str(e))
  </code></pre>
  
  <p>The problem is that I am getting an "index out of range" error. Attached is the erro I am getting.</p>
  
  <pre><code>ERROR:  plpy.Error: Error generating insert queries--&gt;list index out of rangeDebug is --Completed--
  CONTEXT:  Traceback (most recent call last):
    PL/Python function "procurementlist_process", line 61, in &lt;module&gt;
      raise plpy.error("Error generating insert queries--&gt;"+str(e)+"Debug is "+debugcode)
  PL/Python function "procurementlist_process"
  </code></pre>
  
  <p>I am not able to understand how the index is out of range when I am using a for loop.</p>
  
  <p>Please help !! </p>
  
  <p>EDIT : Note that the test data in  my table, the number of items in unpbatches is only 1.</p>