Python集合调用len()报TypeError: NoneType无len()错误的问题
问题原因
set.remove() 和 set.discard() 都是原地修改集合的方法,执行后不会返回新的集合,它们的返回值是 None。你把这个 None 赋值给了 sett_without_val,后续调用 len(sett_without_val) 时,自然会触发 TypeError——因为 None 类型没有长度属性。
修复方案
有两种常用的修复方式,按需选择:
方式一:原地修改后直接返回集合长度
这种方式直接修改原集合,适合不需要保留原集合的场景,用 discard 比 remove 更安全(元素不存在时不会抛出 KeyError):
# 将整数列表转为集合,移除指定值后返回剩余集合的长度 def foo(nums, val): sett = set(nums) sett.discard(val) return len(sett) print(foo([3,2,2,3],3)) # 输出:1
方式二:生成新集合(不修改原集合)
如果你需要保留原集合,可以用集合的差集操作生成新集合,再返回其长度:
# 将整数列表转为集合,移除指定值后返回剩余集合的长度 def foo(nums, val): sett = set(nums) sett_without_val = sett - {val} # 差集操作返回新集合 return len(sett_without_val) print(foo([3,2,2,3],3)) # 输出:1
内容的提问来源于stack exchange,提问作者bachzealot
相关产品推荐
相关产品推荐

