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

Python异常处理:KeyError报错时跳过无效数据(Google Colab)

遍历数据跳过无效条目的异常处理实现

需求说明

在Google Colab平台编写Python数据处理代码时,需要为现有遍历逻辑添加异常处理机制:当代码运行抛出指定错误时,直接忽略当前条目的无效数据,不中断整体循环执行。

原始待修改代码

from numpy.core.fromnumeric import var
from datetime import date
counter=0
for symbol in relevant:  
  if len(k[s])>0:   

    varD = (pd.DataFrame(k[s])[0])
    varO = (pd.DataFrame(k[s])[1])
    varH = (pd.DataFrame(k[s])[2])
    varL = (pd.DataFrame(k[s])[3])
    varC = (pd.DataFrame(k[s])[4])
    
    print("Symbol","P-H","P-L","P-C","T-H","T-L","CMP")
    print(symbol,varH[0],varL[0],varC[0],varH[1],varL[1],varC[1])

报错信息

ValueError                                Traceback (most recent call last)
/usr/local/lib/python3.7/dist-packages/pandas/core/indexes/range.py in get_loc(self, key, method, tolerance)
    384                 try:
--> 385                     return self._range.index(new_key)
    386                 except ValueError as err:

ValueError: 1 is not in range

The above exception was the direct cause of the following exception:

KeyError                                  Traceback (most recent call last)
3 frames
/usr/local/lib/python3.7/dist-packages/pandas/core/indexes/range.py in get_loc(self, key, method, tolerance)
    385                     return self._range.index(new_key)
    386                 except ValueError as err:
--> 387                     raise KeyError(key) from err
    388             raise KeyError(key)
    389         return super().get_loc(key, method=method, tolerance=tolerance)

KeyError: 1

问题原因

部分symbol对应的数据行数不足,不存在索引为1的行,访问varH[1]、varL[1]、varC[1]时触发KeyError,导致整个循环中断。另外原始代码存在笔误:循环变量为symbol,判断条件中写的是未定义的s,运行时会额外触发NameError。

修改后代码

直接用try-except包裹单条数据的核心处理逻辑,捕获到目标异常时直接跳过当前条目即可:

from numpy.core.fromnumeric import var
from datetime import date
import pandas as pd

valid_count = 0
skip_count = 0
for symbol in relevant:  
    # 修正原代码笔误,将未定义的s替换为循环变量symbol
    if len(k[symbol]) > 0:
        try:
            df = pd.DataFrame(k[symbol])
            varD = df[0]
            varO = df[1]
            varH = df[2]
            varL = df[3]
            varC = df[4]
            
            print("Symbol","P-H","P-L","P-C","T-H","T-L","CMP")
            print(symbol, varH[0], varL[0], varC[0], varH[1], varL[1], varC[1])
            valid_count += 1
        # 捕获索引/列不存在触发的KeyError
        except KeyError:
            skip_count += 1
            # 如需排查跳过的条目,可放开下面的打印
            # print(f"跳过无效条目{symbol}:数据长度/列数不符合要求")
            continue

print(f"处理完成:有效处理{valid_count}条,跳过无效数据{skip_count}条")

实现说明

  • 异常捕获仅包裹单条数据的处理逻辑,不会误拦截循环外、其他代码段的报错,方便排查真实代码问题
  • 修正了原代码的变量笔误,避免无意义的运行错误
  • 新增的计数逻辑可以直观统计处理结果,不需要可以直接删除
  • 如果后续需要跳过其他类型的错误(比如值格式错误触发的ValueError),直接在except后追加对应的错误类型即可,不需要调整整体结构

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 09:57:30