How to fix "list index out of range" error?

Collapse
X
 
  • Time
  • Show
Clear All
new posts
  • Karen Rosen
    New Member
    • Feb 2011
    • 2

    How to fix "list index out of range" error?

    This is my first program of any sort I am getting this error

    File "karenrosen5.py ", line 162, in <module>
    record.append(t riad("NoReleve" ,line))
    File "karenrosen5.py ", line 115, in triad
    item = data[fields2[key]]
    IndexError: list index out of range

    The code in question is
    Code:
    def triad(key,data):
        try:
            assert key in fields
        except:
            print "key %s not found" %key
            raise ValueError,key
        item = data[fields2[key]]
        if key in noblanks:
            item = item.replace(" ","")
        if key.startswith("_"):
            key = key.replace("_","")    # hack for double column names
        if isblank(item):
            if defaults:
                if key in defaults.keys():
                    return  "<%s>"%key+defaults[key]+"</%s>"%key
                else:
                    return  "<%s>"%key+"(inconnu)</%s>"%key
            else:
                print line
                raise BadLine
        return "<%s>"%key+item+"</%s>"%key
    
    defaults = {"NAS":"000000000","A_DateNaissance":"1/1/20","B1_NbJoursGarde":"0"}
    noblanks = ["NAS","CodePostal"]
    
    
    filename = "KR.tsv"
    outname = "KR5.xml"
    
    outfile = file(outname,"w")
    
    data = [item.strip().split("\t") for item in file(filename).readlines()]
    fields = data[0]
    fields2 = dict([(item[1],item[0]) for item in enumerate(fields)])
    
    # hack for double column names
    fields2["_Prenom"]=4
    fields2["_NomFamille"]=3
    
    fields += "_Prenom _NomFamille".split()
    # end hack for double column names
    
    print fields2
    
    outfile.write(prefix)
                
    for line in data[1:]:
        if not [item for item in line if (not isblank(item))]:
            break     # TSV file ends with many blank lines; exit and clean up on first one
        try:
            record = ["\n\n<R>"]
    
            record.append(triad("Annee",line))
            record.append(triad("NoReleve",line))
    
            record.append("<Payeur>")
    
            record.append(triad("NAS",line))
            record.append(triad("_NomFamille",line))
            record.append(triad("_Prenom",line))
    
            record.append("<Adresse>")
            record.append(triad("Ligne1",line))
            record.append(triad("Ville",line))
            record.append(triad("Province",line))        
            record.append(triad("CodePostal",line))
            record.append("</Adresse>")
    
            record.append("</Payeur>")
    
            record.append("<Enfant>")
    
            record.append(triad("NomFamille",line))
            record.append(triad("Prenom",line))
            record.append(triad("A_DateNaissance",line))
    
            record.append("<CaseB>")
            record.append(triad("B1_NbJoursGarde",line))
            record.append("</CaseB>")
    
            record.append("<Montants>")
            record.append(triad("C_FraisPayes",line))
            record.append("</Montants>")
            
            record.append("</Enfant>")
    
            record.append("</R>") 
            record = "\n".join(record)
            outfile.write(record)
        except BadLine:
            pass
  • bvdet
    Recognized Expert Specialist
    • Oct 2006
    • 2851

    #2
    To debug this, make a series of print statements prior to the line with the error.
    Code:
    print data
    print fields2
    print key
    The error message is telling you that the list index is not valid for the list. Example:
    Code:
    >>> s = [0,1,2,3,4,5]
    >>> s[6]
    Traceback (most recent call last):
      File "<interactive input>", line 1, in ?
    IndexError: list index out of range
    >>>

    Comment

    Working...