如何修复Python字符串转换时值含逗号导致解析失败的Bug
问题根因
原有逻辑核心缺陷是直接用逗号做全局分割,没有区分「字段间分隔用的逗号」和「字段值内部自带的逗号」,只要任意字段值中出现逗号,就会被错误拆成多个独立片段,后续按冒号拆分键值的逻辑自然失效。另外原有针对HTTP链接的硬编码兼容逻辑鲁棒性差,空值也没有按要求转换为None。
修复后代码
import re def convert(example): # 移除首尾大括号 content = example.strip("{}") # 匹配真正的字段分隔边界:逗号+空格+键名(字母/横杠组成)+冒号,不会误拆值内部的逗号 split_pattern = re.compile(r',\s+(?=[a-zA-Z-]+:)') kv_list = split_pattern.split(content) final = {} for kv in kv_list: # 仅按第一个冒号拆分键和值,自动兼容值内带冒号的场景(如URL) key, value = kv.split(":", 1) # 统一清理首尾空白字符 key = key.strip() value = value.strip() # 空值转换为None final[key] = value if value else None return final
效果验证
- 针对带逗号的异常字符串测试,输出完全匹配目标结果:
{ "tvg-id": None, "tvg-name": "Antonio, ihm schmeckt's nicht! (2016)", "tvg-logo": "https://image.tmdb.org/t/p/w600_and_h900_bestv2/dyLfGb1mF2PUd0Rz5kqKiYtQl3r.jpg", "group-title": "2017-16-15 Germany Cinema" }
- 针对原无逗号的正常字符串测试,解析结果和原有逻辑输出一致,无兼容性问题。
核心优化点
- 放弃全局逗号拆分逻辑,通过正则精准识别字段边界,从根源避免值内逗号被误判为分隔符
- 键值拆分时仅切割第一个冒号,无需单独硬编码兼容HTTP链接场景,所有值内带冒号的格式都能正常处理
- 用
strip()统一清理空白字符,比手动判断首位字符的写法兼容性更强 - 自动识别空值转换为
None,符合输出要求
内容的提问来源于stack exchange,提问作者DFB
相关产品推荐
相关产品推荐

