Python exec函数执行含引号的赋值字符串触发SyntaxError如何解决
问题根源
你遇到的语法错误是因为待赋值的字符串内部包含双引号,手动拼接执行语句时,这些内部双引号会提前闭合包裹字符串的外层双引号,破坏Python语法规则。手动替换引号、加三重引号的方案不可靠,因为待赋值内容可能包含任意特殊字符(单引号、反斜杠、换行符等),手动处理很容易遗漏。
最优解决方案
完全放弃使用exec拼接字符串的实现方式,直接通过遍历嵌套字典赋值,这是最安全也最不容易出问题的方案:
- 先实现一个通用的嵌套字典赋值函数
def set_nested_value(nested_dict, key_path, value): current = nested_dict # 逐层遍历到目标节点的父级 for key in key_path[:-1]: current = current[key] # 给目标节点赋值 current[key_path[-1]] = value
- 替换原有循环逻辑
for index, row in md_csv.iterrows(): target_path = row['Path'] assign_value = str(translated_csv.iloc[index][1]) set_nested_value(jo, target_path, assign_value)
这种方案完全不需要处理任何引号转义问题,Python会自动处理字符串的所有特殊字符。
兼容exec的替代方案
如果因特殊场景必须使用exec实现,不要手动拼接值的部分,用Python内置的repr()函数把待赋值的内容转成合法的Python字符串字面量,它会自动处理所有转义、引号包裹的逻辑:
把你原来拼接my_string的代码行替换为:
my_string = f"jo{json_ref_string} = {repr(str(translated_csv.iloc[index][1]))}"
内容的提问来源于stack exchange,提问作者Max Green
相关产品推荐
相关产品推荐

