如果代码运行正常,为什么会出现列表索引错误?

2024-10-01 15:32:11 发布

您现在位置:Python中文网/ 问答频道 /正文

我有7个txt数据文件,我想为每个文件计算第二列中数字的标准偏差。我写了这段代码:

from pathlib import Path
destdir = Path()
files = [p for p in destdir.iterdir() if p.is_file()]
for p in files:
    with p.open() as f:
        adatok=[]
        for i in f:
            adatok.append(float(i.split()[1]))

        atlag=sum(adatok)/len(adatok)

        elofordulas=[]
        for j in adatok:
            if j not in elofordulas:
                elofordulas.append(j)

        asd1=[]

        for j in elofordulas:
            asd1.append(adatok.count(j)*((atlag-j)**2))

        szoras=sqrt(sum(asd1)/len(adatok))

        print(p)

        print(szoras)

        print('-------')

它运行正常,但我发现以下错误:

---------------------------------------------------------------------------
IndexError                                Traceback (most recent call last)
<ipython-input-99-4efdd5bc461e> in <module>()
      6         adatok=[]
      7         for i in f:
----> 8             adatok.append(float(i.split()[1]))
      9 
     10         atlag=sum(adatok)/len(adatok)

IndexError: list index out of range

为什么??我该怎么办

编辑:这是我的数据文件的一部分,所有行都相同

enter image description here


Tags: pathinforlenif数据文件filessum
1条回答
网友
1楼 · 发布于 2024-10-01 15:32:11

我打赌你的csv文件中有一行没有空格或标签。当然,只需执行一些异常处理:

import sys
from math import sqrt
from pathlib import Path

if __name__ == '__main__':

    destdir = Path()
    files = [p for p in destdir.iterdir() if p.is_file()]

    for p in files:
        with p.open() as f:
            adatok = []
            for line_no, line in enumerate(f, start=1):
                try:
                    adatok.append(float(line.split()[1]))
                except Exception as e:
                    print(f"Exception '{e}' in line {line_no} of file '{p}' reading '{line.strip()}'")
                    sys.exit(-1)

        atlag = sum(adatok) / len(adatok)

        elofordulas = []
        for j in adatok:
            if j not in elofordulas:
                elofordulas.append(j)

        asd1 = []

        for j in elofordulas:
            asd1.append(adatok.count(j) * ((atlag - j) ** 2))

        szoras = sqrt(sum(asd1) / len(adatok))

        print(p)
        print(szoras)
        print('   -')

更新:我们发现堆栈跟踪有点误导。真正的错误是files包含当前文件夹中的所有文件。当然,这包括Python脚本本身

经验教训:解析多个数据文件时,正确的异常处理非常重要

使用建议的异常处理,错误可能是 Exception 'list index out of range' in line 1 of file 'script.python' reading 'import'更明显的是,在哪里寻找错误

相关问题 更多 >

    热门问题