如何将变量传入exec语句?Python exec拼接变量不生效如何解决
问题解决方案
你现有代码的错误原因有两个:
exec(do)写在了for循环外部,循环结束后只会执行一次,无法实现循环打印5次的需求- 你构造的
do字符串没有提前代入循环变量i的取值,exec执行时会把image_label+i识别成字符串字面量拼接操作,自然不会输出你想要的结果
最优方案(完全不需要用exec,避免安全风险)
分两种场景对应写法:
- 场景1:
image_label是固定字符串前缀,不需要读取对应变量:
for i in range(5): print(f"image_label{i}")
- 场景2:需要读取提前定义好的
image_label0~image_label4变量的值:
for i in range(5): # 从全局变量字典中按名称取对应变量 print(globals()[f"image_label{i}"])
必须使用exec的修改方案
如果场景限制必须用exec,调整代码如下即可:
for i in range(5): # 构造执行语句时提前用f-string代入i的取值 do = f"print(image_label{i})" exec(do)
如果担心exec的作用域问题导致变量读取异常,可以手动传入局部变量字典:
for i in range(5): do = "print(f'image_label{i}')" # 手动把当前的i传入exec的执行上下文 exec(do, {"i": i})
内容的提问来源于stack exchange,提问作者Aliman Ahmed
相关产品推荐
相关产品推荐

