为什么会出现索引超出范围错误?错误如下,

时间:2020-06-24 20:05:55

标签: python list for-loop indexoutofrangeexception

这是错误:

enter image description here

我的代码:

def isVariable(line):
    modifier = ['private','protected','public']
    datatype = ['String','int','float','boolean']
    status = False
    linelist = list(line.split())

    if(linelist[0] in modifier):
        if(linelist[1] in datatype):
            if(';' in linelist[len(linelist)-1]):
                status = True
                return status
    else:
        return status

f = open('Student.java','r')
vList = []

for line in f:
    status = isVariable(line)
    if status == True:
        vList.append(line)
  

print(vList)

怎么了?

2 个答案:

答案 0 :(得分:0)

出现错误是因为在该行代码中,

linelist为空,因此,您无法获取列表的第一个(索引0元素。

它可以为空的原因是文件中的空行。

答案 1 :(得分:0)

文件中的其中一行似乎是空的,因此调用list(line.split())将返回一个空列表。因此,没有第零个元素,用IndexError括起来。您可以添加一些try ... except ...块来处理此错误。试试:

def isVariable(line):
    modifier = ['private','protected','public']
    datatype = ['String','int','float','boolean']
    status = False
    linelist = list(line.split())
    
    try:
        has_modifier = linelist[0] in modifier
    except IndexError:
        return status

    try:
        has_datatype = linelist[1] in datatype
    except IndexError:
        return status

    try:
        has_semicolon = ';' in linelist[-1]
    except IndexError:
        return status

    if(has_modifier and has_datatype and has_semicolon):
        status = True
        return status
    else:
        return status


f =  open('Student.java','r')
vList = []

for line in f:
    status = isVariable(line)
    if status == True:
        vList.append(line)
    

print(vList)