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

列表推导式处理记账数据时出现'NoneType'无group属性报错原因求解

问题根源解析

1. 为什么if item is not None没有过滤掉报错项

你写的过滤条件仅判断了Memo列的取值本身是否为None,没有覆盖「Memo有值但正则匹配失败」的场景:只要Memo内容中不存在符合\b[a-zA-Z]{3,}\b规则的子串,re.search就会返回None,此时直接调用.group(0)必然触发属性不存在的报错。

2. 为什么去掉.group(0)就不报错

去掉属性调用后,列表会同时存储匹配成功的re.Match对象、匹配失败的None值,两种类型都可以直接存入列表,不会触发调用错误;但只要你加上.group(0),就会命中匹配失败返回None的场景,触发报错。

列表推导式正确实现

Python 3.8及以上版本可以用海象运算符暂存匹配结果,无需额外捕获异常:

import re
df['Suppliers'] = [
    match.group(0).lower() if (match := re.search(r'\b[a-zA-Z]{3,}\b', item)) else 'na'
    for item in df['Memo']
    if item is not None
]

注:你原有循环实现里,把df['Suppliers'] = pd.DataFrame({'Suppliers': my_list})放在循环体内是冗余操作,会重复给DataFrame赋值,建议等my_list完全生成后再一次性赋值。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 19:15:05