You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.18 13:20:15