Python:捕获IndexError后插入空行并继续for循环避免代码中断
实现方案
核心修改逻辑
- 将try-except异常捕获逻辑放到for循环内部:你当前的代码把整个循环包在try块里,触发一次异常就会直接终止整个循环,完全无法继续执行后续迭代。移到循环内部后,异常只会中断当前次的处理,自动进入下一轮循环。
- 捕获到
IndexError时向结果列表追加和get_data返回结构匹配的空值:最终导出CSV时,空值对应的行就会展示为空行,完全符合你要的位置对应要求。 - 把DataFrame生成、CSV写入操作移到循环结束后执行:你原本的代码每次循环都重复写一次文件,属于完全冗余的IO操作,移到最后统一处理可以大幅提升执行效率。
修改后可运行代码
import pandas as pd d = [] # 如果你的get_data返回的是字符串而非字典,把empty_placeholder改为空字符串""即可 empty_placeholder = {} for i in range(len(df)): try: output = df.loc[i, "column_1"] api_result = get_data(output) d.append(api_result) except IndexError: # 原代码中的address变量未在循环内定义,这里替换为当前处理的column_1值,可自行调整 print('ERROR at index {}: 当前处理值 {!r}'.format(i, output)) # 追加空占位符,对应CSV中的空行 d.append(empty_placeholder) # 全部数据处理完成后统一导出 result_df = pd.DataFrame(d).apply(pd.Series) # 加na_rep=""参数可以确保空值位置没有任何填充字符,是完全的空行 result_df.to_csv('results.csv', index=False, na_rep="")
补充说明
如果你的get_data返回的是单值而非字典结构,把empty_placeholder改为None或者空字符串即可,导出时同样会生成对应位置的空行。如果不需要保留索引列,to_csv的index=False参数可以保留,否则删掉即可。
内容的提问来源于stack exchange,提问作者Aamash Haroon
相关产品推荐
相关产品推荐

