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

Python批量计算意大利税号时异常处理逻辑错误求助

解决意大利税号批量计算的异常处理问题

问题根源

你原来的函数把整个列表推导式放在外层try-except中,只要任意一行的codicefiscale.encode抛出异常(比如出生地无效),整个代码就会直接触发except块,返回统一的"Not Available",覆盖所有行的计算结果。

修改后的代码方案

方案1:用辅助函数封装单条记录的计算逻辑

import pandas as pd
import codicefiscale  # 确保已安装该库

def check(df_PF):
    def calc_single_code(row):
        # 校验必填字段是否非空
        if all(pd.notna(row[col]) for col in ['cognome', 'nome', 'data_nascita', 'tipo_sesso', 'den_comune_nascita']):
            try:
                return codicefiscale.encode(
                    surname=row['cognome'],
                    name=row['nome'],
                    birthdate=row['data_nascita'],
                    sex=row['tipo_sesso'],
                    birthplace=row['den_comune_nascita']
                )
            except Exception:  # 捕获单条记录计算时的异常
                return "Not Available"
        else:
            return None
    
    # 遍历每一行调用辅助函数
    return [calc_single_code(df_PF.iloc[i]) for i in range(len(df_PF))]

方案2:用apply更简洁地处理(推荐)

直接用pandas的apply方法逐行处理,代码更符合pandas使用习惯:

import pandas as pd
import codicefiscale

def calc_fiscal_code(row):
    if all(pd.notna(row[col]) for col in ['cognome', 'nome', 'data_nascita', 'tipo_sesso', 'den_comune_nascita']):
        try:
            return codicefiscale.encode(
                surname=row['cognome'],
                name=row['nome'],
                birthdate=row['data_nascita'],
                sex=row['tipo_sesso'],
                birthplace=row['den_comune_nascita']
            )
        except Exception:
            return "Not Available"
    else:
        return None

# 生成新列存储计算结果
df_PF['codice_fiscale'] = df_PF.apply(calc_fiscal_code, axis=1)

关键修改点

  1. 将异常处理从外层整体捕获改为单条记录单独捕获:每一行的encode计算都被独立的try-except包裹,某一行出错不会影响其他行。
  2. 用all()简化非空校验逻辑,代码更简洁易读。
  3. 方案2使用apply避免手动遍历索引,更符合pandas最佳实践。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.03 13:50:40