python文件读取列表索引错误:索引超出范围

时间:2021-01-15 15:58:28

标签: python list indexing file-io

我遇到了以下代码的错误:

h = 0
num = 0
with open('file1') as f:

    for row in f.readlines():
        line = row.split()

        print(line)

        # check for new
        if int(float(line[0])) != h:
            h = int(float(line[0]))
            num += 1

输出:

['3', '1', '35', '31.924847576898625', '5.128603105085375', '6.20101', '0.7821899999999999', '0.23388931803044988']
[]
Traceback (most recent call last):
  File "phase_one.py", line 45, in <module>
    if int(float(line[0])) != h:
IndexError: list index out of range

为什么当我调用print()时,打印的是实际的行,但后面还打印了一个空列表'[]',这是导致这个错误的原因?

1 个答案:

答案 0 :(得分:1)

您的文件中有两行。第一行是第一行。 文件的第二行是空白的。要么

  1. 删除该行
  2. 或者,在尝试访问其第一个元素之前检查 line 是否为空。空列表是假的,因此您只需执行 if line and int(line[0])...,短路将处理其余的工作。
line = row.split()
print(line)

if line and int(line[0]) != h:
    h = int(line[0])
    num += 1
  1. 或者,捕获抛出的错误。
line = row.split()
print(line)

try:
    if int(line[0]) != h:
        h = int(line[0])
        num += 1
except IndexError:
    pass

此外,在将字符串转换为 float 之前,您无需将其转换为 int。只需 if int(line[0]) != h: 就足够了。