Python列表推导式报Expected string or bytes-like object错误如何解决
错误原因与修复方案
核心错误点
re.search()参数顺序颠倒:正确语法为re.search(匹配模式, 待搜索字符串, 标志位),你的代码把待检查的元组字段item[4]和目标匹配值merchant_state写反,完全无法实现筛选需求。- 返回值判断错误:
re.search()匹配成功返回匹配对象,失败返回None,你用!= -1的判断逻辑完全错误。 - 缺少非字符串类型兼容:大型数据集中
item[4]可能存在None、数字等非字符串值,直接传入re.search()就会触发你遇到的类型错误。
修复代码
方案1:保留正则匹配的写法
首先确认代码开头已导入正则模块:
import re merchant_state = 'VIC' # 原companies列表定义不变 companies = [(378355, 'ACT', 'DEJAN TOMIC', 'Individual/Sole Trader', 'VIC', '3175', 97603461250, 'FADEDLINESBARBERSHOP', 20), (408649, 'ACT', 'ALEXANDER DEJANOVIC', 'Individual/Sole Trader', 'NSW', '2193', 97733511621, None, 20), (433402, 'ACT', 'LUTHERAN CHURCH OF AUSTRALIA QUEENSLAND DISTRICT(LUTHERAN COMM CAR', 'Other Unincorporated Entity', 'QLD', '4560', 97899426696, 'GRACEVILLE CENTRE', 20)] # 修复后的筛选逻辑 companies = [item for item in companies if isinstance(item[4], str) and re.search(merchant_state, item[4], re.IGNORECASE)]
方案2:更高效的无正则写法
如果只是简单判断包含关系,不需要复杂正则规则,直接用in关键字性能更好,也不需要导入re模块:
merchant_state = 'VIC' # 原companies列表定义不变 companies = [item for item in companies if isinstance(item[4], str) and merchant_state.upper() in item[4].upper()]
内容的提问来源于stack exchange,提问作者prij_naidu
相关产品推荐
相关产品推荐

