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
相关产品推荐
相关产品推荐

