You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Deap运行时触发KeyError: '244'错误,求解决方案

解决DEAP框架代码中的KeyError: '244'问题

首先看你遇到的错误追踪信息:

C:\Python27\python.exe C:/Users/Adekunle/PycharmProjects/d4jtest/newDp.py
Traceback (most recent call last):
  File "C:/Users/Adekunle/PycharmProjects/d4jtest/newDp.py", line 166, in <module>
    main_run("C:\defect4j\TinyGP")
  File "C:/Users/Adekunle/PycharmProjects/d4jtest/newDp.py", line 151, in main_run
    Fitness, RawScore, Formula = main()
  File "C:/Users/Adekunle/PycharmProjects/d4jtest/newDp.py", line 130, in main
    halloffame=hof, verbose=True)
  File "C:\Python27\lib\site-packages\deap\algorithms.py", line 150, in eaSimple
    fitnesses = toolbox.map(toolbox.evaluate, invalid_ind)
  File "C:/Users/Adekunle/PycharmProjects/d4jtest/newDp.py", line 82, in eval_func
    spectrum = FaultVersionsDict[str(numberOfversion[version])]
KeyError: '244'
Process finished with exit code 1

错误根源分析

这个KeyError的核心问题出在readcsv()函数里的逻辑错误:
你在循环读取每个csv文件时,每次都重新初始化了FaultVersionsDict = {}和i=0,这意味着循环结束后,字典里只会保留最后一个文件的键'0',而你的numberOfversion是随机从0-254中选取的数值(比如244),自然找不到对应的键,触发KeyError。

修复步骤

1. 修复readcsv()函数

把字典和计数器i的初始化移到for循环外面,确保每个文件的索引都能正确存入字典:

def readcsv():
    files = datafile()
    nFaultVersion = len(files)
    vFaultLocation = np.zeros(nFaultVersion)
    vStatementCount = np.zeros(nFaultVersion)
    i = 0
    FaultVersionsDict = {}  # 移到循环外初始化
    for csvfiles in files:
        nFirstFault = (pd.read_csv(csvfiles, sep=',', nrows=0)).columns[0]
        df = pd.read_csv(csvfiles, skiprows=1, header=None).values
        dset = list(list(float(elem) for elem in row) for row in df)
        vFaultLocation[i] = nFirstFault
        vStatementCount[i] = df.shape[0]
        FaultVersionsDict[str(i)] = df
        i = i + 1
    return [vFaultLocation, vStatementCount, FaultVersionsDict]

2. 修复其他潜在问题

除了KeyError,你的代码还有两个需要修正的地方:

  • 路径转义问题:Windows路径里的\需要转义成\\或者用原始字符串,比如把main_run("C:\defect4j\TinyGP")改成main_run(r"C:\defect4j\TinyGP"),避免转义字符引发的错误。
  • 变量赋值不匹配:main()函数返回的是pop, log, hof,但你在main_run里写的是Fitness, RawScore, Formula = main(),这会触发ValueError,要改成:
pop, log, hof = main()
# 如果你要保存适应度和公式,应该从log和hof里提取对应内容
# 比如保存最优公式:
best_formula = hof[0] if hof else None

验证修复

修改后,FaultVersionsDict会包含所有csv文件对应的索引键(从0到文件总数-1),当numberOfversion选取这个范围内的数值时,就能正常访问到对应的spectrum数据,不会再触发KeyError。

内容的提问来源于stack exchange,提问作者Eyinlojuoluwa

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.08 18:12:32