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

Python处理API返回JSON写入MySQL时如何避免逐字段编写Try-Except块

最优方案:字段逻辑配置化 + 通用异常捕获函数

你可以把所有字段的取值、转换规则统一存到配置字典里,再写一个通用的安全执行函数处理异常,完全避免重复写try-except块。

示例实现

from datetime import datetime

# 第一步:定义所有字段的转换规则,新增字段只需在这里加配置
FIELD_RULES = {
    "col1": lambda record: record["field1"][0],
    "col2": lambda record: int(record["field2"][:4]),
    "col3": lambda record: ';'.join(record["field3"]),
    "col4": lambda record: datetime.strptime(record["field4"][:10], '%Y-%m-%d').strftime('%d %b %Y'),
    "col5": lambda record: ' '.join(record["field5"])
}

# 第二步:通用安全转换函数,统一处理异常
def safe_convert(convert_func, record, default=None):
    try:
        return convert_func(record)
    except (KeyError, IndexError, ValueError, TypeError):
        # 可根据实际需要调整捕获的异常类型,也可自行添加错误日志逻辑
        return default

# 第三步:遍历数据批量处理
for record in api_data:
    processed = {}
    for col_name, rule in FIELD_RULES.items():
        processed[col_name] = safe_convert(rule, record)
    # 直接把processed字典传入MySQL插入逻辑即可

自定义默认值扩展

如果需要针对不同字段设置不同的默认返回值,可以把规则配置改成(转换函数, 默认值)的元组形式:

FIELD_RULES = {
    "col1": (lambda r: r["field1"][0], ""),
    "col2": (lambda r: int(r["field2"][:4]), 0),
    # 其余字段规则
}

# 调用时调整为
for col_name, (rule, default) in FIELD_RULES.items():
    processed[col_name] = safe_convert(rule, record, default)

方案优势

  • 完全符合DRY原则,没有重复的异常捕获代码
  • 字段规则维护简单,新增/修改字段只需要调整FIELD_RULES配置,不需要修改业务逻辑
  • 异常处理逻辑统一,需要加日志、调整默认值只需要修改safe_convert函数即可

内容的提问来源于stack exchange,提问作者coLby

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 04:54:04