Pandas中如何为空DataFrame创建异常 用try/raise实现异常处理
Pandas空DataFrame场景自定义异常抛出与捕获实现
实现逻辑
- 第一步:自定义专属异常类,继承Python内置
Exception基类,和其他通用异常做区分,方便精准捕获定位问题 - 第二步:使用Pandas DataFrame自带的
.empty属性判断是否为空表,该属性在DataFrame无任何有效数据时返回True,是官方推荐的空表判断方式 - 第三步:用
try块包裹数据校验+业务处理逻辑,检测到空表时用raise语句抛出自定义异常,再通过except块精准捕获该类异常做对应处理
完整示例代码
import pandas as pd # 定义空DataFrame专属异常 class EmptyDataFrameError(Exception): """数据处理场景下空DataFrame抛出的专属异常""" pass def process_score_data(input_df: pd.DataFrame): try: # 空表校验 if input_df.empty: # 抛出自定义异常,附带明确错误提示 raise EmptyDataFrameError("当前传入的成绩DataFrame为空,无法执行后续统计计算") # 非空场景下的正常业务逻辑,示例为计算平均分 avg_score = input_df['score'].mean() print(f"成绩表处理完成,平均分为:{avg_score}") return avg_score except EmptyDataFrameError as e: # 专门捕获空表异常,执行自定义处理逻辑 print(f"[错误捕获] 数据校验不通过:{str(e)}") # 可按需扩展:返回默认值、记录错误日志、终止流程等 return None if __name__ == "__main__": # 测试空DataFrame场景(对应示例提供的空数据) name_dict = {'name': [], 'score':[]} empty_df = pd.DataFrame(name_dict) print("测试空DataFrame场景:") process_score_data(empty_df) print("\n测试非空DataFrame场景:") valid_df = pd.DataFrame({'name': ['张三', '李四'], 'score': [90, 85]}) process_score_data(valid_df)
注意事项
不要单独用
len(df) == 0做空表判断,当DataFrame存在列名但无行数据时该判断生效,但遇到无列无行的极端空表场景,.empty的判断准确率更高。捕获异常时只指定自定义异常类即可,不要直接写裸except吞掉所有其他类型的报错,避免掩盖代码本身的逻辑问题。
内容的提问来源于stack exchange,提问作者AK007
相关产品推荐
相关产品推荐

