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)
关键修改点
- 将异常处理从外层整体捕获改为单条记录单独捕获:每一行的
encode计算都被独立的try-except包裹,某一行出错不会影响其他行。 - 用
all()简化非空校验逻辑,代码更简洁易读。 - 方案2使用
apply避免手动遍历索引,更符合pandas最佳实践。
内容的提问来源于stack exchange,提问作者Andrea
相关产品推荐
相关产品推荐

