如何在Python列表推导式中处理函数执行报错问题?
列表推导式中函数报错的简洁处理方案
针对你遇到的两种报错场景(数据含NaN、城市无对应数据),最简洁的处理方式是在函数内部封装异常捕获逻辑,让列表推导式保持干净的写法,同时确保错误场景返回指定的NA值。
改造函数,内置异常处理
修改原函数,精准捕获可能出现的异常类型(无匹配城市引发的IndexError、NaN运算引发的ValueError/TypeError),异常时返回包含NA的结果:
import pandas as pd import numpy as np def calc_some_stuff(input_df, city): try: # 提取匹配城市的单条数据,避免Series运算的潜在问题 temp_data = input_df[input_df.city == city].iloc[0] value = int(temp_data.population_m * temp_data.density_kms / 5) return {'city': city, 'value': value} except (IndexError, ValueError, TypeError): # 无匹配城市/NaN运算时返回NA return {'city': city, 'value': 'NA'}
调用示例
无论是含NaN的数据集还是带缺失城市的列表,直接用列表推导式调用函数即可:
# 测试含NaN的数据集 df = pd.DataFrame({ 'city': ['London','Paris','New York'], 'population_m': [6.7,7.2,12.1], 'density_kms': [5752,np.nan,4856] }) # 测试带缺失城市的列表 cities = ['London','Paris','New York','Berlin'] # 生成结果DataFrame并输出指定格式 result_df = pd.DataFrame([calc_some_stuff(df, c) for c in cities]) print(result_df.to_csv(index=False, na_rep='NA'))
输出结果
运行后会得到你期望的格式:
city,value London,4568 Paris,NA New York,4862 Berlin,NA
方案优势
- 函数逻辑与异常处理解耦,外部调用(列表推导式)无需额外判断,写法简洁
- 精准捕获目标异常,不会意外吞掉其他未知错误
- 函数可复用,后续其他场景调用时无需重复编写错误处理逻辑
内容的提问来源于stack exchange,提问作者Justin Beresford
相关产品推荐
相关产品推荐

