>>>a = {}
>>>b = 'c'
>>>a[b] = 2
>>>a
{'c': 2}
执行上面语句正常赋值,换做是用exec执行字符串
>>>exec(f"a = {{}}") #赋值成功
>>>exec(f"b = 'c'") #赋值成功
>>>exec(f"{a}[{b}] = 2") #无报错,但a的值没有发生变化
>>>a
{}
求问为什么会这样,有时候exec执行其他字符串同样会出现NameError等未定义的情况,请教下如何把上面的exec语句改成符合预期的语句
分两块分析,
第一块,f-string 字符串格式化
第二块,exec函数
相当于exec("a = {}"), 执行后a为{}
执行后b为'c'
相当于exec("{}[{c}] = 2"), 那么就产生2个问题了:
第一,c没有定义会报NameError: name 'c' is not defined
第二,添加的对象是{}而不是a,a也就不会变。
应修改成
相当于exec(f"a['c'] = 2")
最后题外话,不推荐使用exec,尤其exec里还是f-string。