本文介绍如何将格式不统一(分隔符为`;`、`:`或空格)的变量名-值字符串,稳健地解析为键值对字典,避免动态创建变量带来的安全与可维护性风险。
在Python中处理类似 'var_name; var_value var_name1; var_value1 var_name2 var_value2 var_name3: var_value3' 的字符串时,核心目标是提取成对的“变量名 → 值”映射。虽然技术上可通过 exec()、globals()[name] = value 或 locals() 动态创建变量,但强烈不推荐——这会破坏作用域清晰性、引发命名冲突、带来代码注入风险,且难以调试和测试。
✅ 推荐方案:使用字典(dict)作为结构化容器,既安全又灵活。关键在于正确切分并配对 token:
string = "var_name; var_value var_name1; var_value1 var_name2 var_value2 var_name3: var_value3"
def parse_key_value_pairs(s):
tokens = s.split()
result = {}
i = 0
while i < len(tokens):
# 提取键:移除末尾可能的分隔符 ; 或 :
key = tokens[i].rstrip(";:")
i += 1
# 检查是否有对应值(防止索引越界)
if i < len(tokens):
value = tokens[i]
result[key] = value
i += 1
else:
# 若无值,可设为 None 或跳过(根据业务需求)
result[key] = None
return result
data = parse_key_value_pairs(string)
print(data)
# 输出: {'var_name': 'var_value', 'var_name1': 'var_value1', 'var_name2': 'var_value2', 'var_name3': 'var_value3'}该函数鲁棒性强
:
? 进阶提示:
总之,用字典代替动态变量,是清晰、安全、可扩展的首选路径。