首页 > 解决方案 > 你能弄清楚为什么我的代码给了我一个 IndexOutOfBounds 错误吗?

问题描述

我目前正在尝试通过 Python 填充 SQL 数据库(用于分配)。我创建了一个函数来帮助我做到这一点。但是,当我运行该函数时,我收到“列表索引超出范围”索引错误。我将不胜感激所有帮助!

我曾尝试恢复到一些旧代码,但它对当前问题没有帮助。

据我了解,显然没有“字段 [1]”(否则我不会收到此错误)我尝试在我的函数发生时打印每个步骤......只是发现我可以,事实上,打印难以捉摸的值,但仍然收到关于该行的错误?

我已经包含了我认为相关的所有代码,但是,如果您认为我一定遗漏了什么,请随时与我联系。非常感谢!

def populateStudentTable(textFile,targetTable):
    connection = sqlite3.connect(dbName)
    cursor = connection.cursor()
    numRecs = 0
    dataRecs = []
    textRec = textFile.readline()
    while textRec != "":
        numRecs += 1
        field = textRec.split(", ")
        print(field)
        print(field[0])
        print(field[1])
        textRec = textFile.readline()

当我运行程序时,它会打印列表中的第二项:字段 [1] 但之后,它给了我一个错误......

['VENNGEOR', 'Georgia', 'Venna', '12', 'Maths', '8596746234']
VENNGEOR
Georgia

这是我收到的错误:

Traceback (most recent call last):
File "h:\Digital Solutions\VS Code\Dev.py", line 22, in <module>
numRecs = populateStudentTable(textFile,"tblMentor")
File "h:\Digital Solutions\VS Code\Dev.py", line 14, in 
populateStudentTable:print(field[1])
IndexError: list index out of range

在阅读了一些评论并自己进行了一些调试后,我发现“buran”是正确的。我只是留下了一些空行,并试图在空行上运行一个循环。

标签: pythonindexoutofrangeexception

解决方案


中的一行textFile不包含,您期望的字符数。当您这样做时,如果该行中的元素少于两个,field = textRec.split(", ")则结果可能没有您期望的 3 个元素。field,

检查文件的内容,或者简单地代替fieldprintfield本身的打印元素。这将使您更容易理解您在哪里做错了。

还要注意你是用“,”(不是“,”)分割的,所以要注意这样的情况也可能导致你的错误:

>>> foo = "a,b,c, d"
>>> foo.split(", ")
['a,b,c', 'd']

推荐阅读