You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用exec赋值字符串变量触发SyntaxError的问题求助

问题解答

推测准确性

你的推测完全准确,exec执行时确实是对字符串值的解析出现混淆,进而触发语法错误。

原理说明

exec()的作用是执行合法的Python代码字符串。当你构造出Introduction0=What is your Department?这类代码字符串时,Python解析器会把等号右侧的内容当作表达式处理:

  • 其中is是Python的关键字,不能作为标识符的组成部分;
  • 字符串里的空格会被解析为多个语法单元的分隔符,Python会尝试将What、is、your、Department?当作独立元素,但这种组合完全不符合Python语法规则,因此抛出SyntaxError。

本质问题是:如果不用引号包裹,exec会把等号右侧的内容视为Python代码的一部分(变量、关键字、表达式等),而非字符串字面量。

解决方法

需要给赋值右侧的字符串加上引号,让exec识别它是字符串字面量。最稳妥的方式是用repr()函数,它会自动为字符串添加合适的引号,还能处理字符串内部包含引号的情况:

修改后的核心代码:

for each_category in json_template:
    for index, each_question in enumerate(json_template[each_category]):
        left_side = each_category + str(index)
        right_side = each_question

        # 用repr()包裹右侧字符串,生成合法的赋值代码
        bigstring = f'{left_side} = {repr(right_side)}'

        exec(bigstring)
        print(bigstring)

运行后,bigstring会变成类似Introduction0 = "What is your Department?"的合法代码,exec就能正确执行,将变量赋值为对应的字符串。

关于str(int)格式能运行的原因

当你把内容转为str(int)格式时,得到的是纯数字字符串(比如"123"),此时exec执行的代码类似Introduction0=123——右侧的123是合法的数字字面量,Python可以正常解析,因此不会报错。但这种方式仅适用于纯数字内容,无法保留原始的带空格和关键字的字符串。

内容的提问来源于stack exchange,提问作者BrianBeing

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.08 11:05:15