如何为Python文件读取代码添加异常处理并维持程序执行?
处理Pandas读取空文件时的pd.concat异常问题
问题分析
你的代码中,当metadata_files包含空文件或列表为空时,会在pd.concat环节触发异常:
- 单个空文件被
pd.read_csv读取时,可能抛出ParserError(无可用解析内容) - 若所有文件读取后均为空/读取失败,生成器中无有效DataFrame,
pd.concat会抛出ValueError: No objects to concatenate
解决方案
通过分层异常处理解决:在单个文件读取时捕获异常,跳过无效文件并发送提示;在拼接环节捕获无有效对象的异常,初始化空DataFrame并反馈状态。
修改后的代码如下:
import pandas as pd metadata_files = [] # 替换为你的实际文件路径列表 csv_df = pd.DataFrame() valid_dfs = [] for file in metadata_files: try: # 读取单个文件,捕获空文件、格式错误等读取异常 df = pd.read_csv(file, encoding='utf-8', sep=";") valid_dfs.append(df) except Exception as e: # 替换为你的消息通知逻辑(打印、邮件、API调用等) print(f"读取文件失败: {file},错误原因: {str(e)}") try: # 拼接所有有效DataFrame meta_files_df = pd.concat(valid_dfs, ignore_index=True) if meta_files_df.empty: print("警告: 所有文件读取后均为空,最终结果是空DataFrame") except ValueError as e: # 无有效可拼接对象时初始化空DataFrame并发送消息 print(f"拼接失败: {str(e)},已初始化空DataFrame") meta_files_df = pd.DataFrame()
关键说明
- 单文件异常捕获:用
try-except包裹pd.read_csv,覆盖空文件、文件不存在、编码错误等多种场景,同时记录具体错误信息方便排查。 - 有效数据收集:仅将读取成功的DataFrame加入列表,避免无效数据进入拼接流程。
- 拼接异常处理:捕获
pd.concat的ValueError,处理无有效对象的情况,保证程序不中断。 - 空结果提示:即使拼接成功但结果为空,也发送提示,避免后续逻辑因空DataFrame出现意外。
内容的提问来源于stack exchange,提问作者beginner0022
相关产品推荐
相关产品推荐

