如何筛选Python列表指定前缀元素并避免NoneType的startswith报错
问题原因
你的猜测完全正确,报错触发的核心原因是列表中存在None这类非字符串类型的元素,这类元素没有startswith方法,调用时就会抛出AttributeError。
解决方案
你可以根据场景选择以下任意一种实现方式:
- 方案1:先判断元素是否为字符串,再执行前缀匹配(最稳妥,不会出现非字符串转字符串后的误匹配问题)
result = [i for i in test if isinstance(i, str) and i.startswith('/players/')]
- 方案2:先过滤掉
None值再匹配(仅适合列表中只有None是非字符串元素的场景)
result = [i for i in test if i is not None and i.startswith('/players/')]
- 方案3:统一转成字符串后再匹配(写法最简单,要注意是否存在非字符串元素转字符串后刚好匹配前缀的极端情况)
result = [i for i in test if str(i).startswith('/players/')]
以上三种方案运行后,得到的result均为你需要的球员链接列表:
['/players/england/dominic-solanke', '/players/england/jaidon-anthony', '/players/england/david-brooks', '/players/england/morgan-rogers', '/players/england/junior-stanislas', '/players/england/ben-pearson', '/players/england/jamal-lowe']
内容的提问来源于stack exchange,提问作者SlowBear
相关产品推荐
相关产品推荐

