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
相关产品推荐
相关产品推荐

