使用 exec() eval() 方法时如何克服格式化字符串的限制?
Posted
技术标签:
【中文标题】使用 exec() eval() 方法时如何克服格式化字符串的限制?【英文标题】:How to overcome formatted string limitations when using exec() eval() method? 【发布时间】:2021-05-23 15:39:36 【问题描述】:由于 eval/exec 功能的限制,我遇到了问题
由于 exec 和 eval 不会自动适应正确的类型(因为我们在格式化字符串中),在(很多)需要代码生成的情况下,这种格式化字符串评估方法将不起作用(参见示例下面)。
所以我问社区是否有更聪明的方法来创建这种 API 生成
例子:
# *context: writing automation using software api*
# I need to apply the dict values to the API, to do so I will use exec()
dict =
"api" : "value"
"count" : 5
"name" : "MyCustomName"
"color" : [1,0,0]
import API
for key,value in dict.items():
exec(f"API.key = value") #this won't work because value type isn't supported in formatted string
【问题讨论】:
您不需要执行此操作 啊?我错过了什么明显的东西吗? 几乎从不需要评估。几乎总是有另一种方式,除非你做的事情非常不寻常,否则你可以摆脱“几乎”。 确实,我希望我早点知道 setattr() ! 除非您的实际目标是动态评估代码,否则 eval/exec 永远不是解决方案。 【参考方案1】:exec
是不必要的,直接使用setattr
:
for key,value in dict.items():
setattr(API, key, value)
旁注:不要命名变量dict
,它会影响内置函数。
【讨论】:
以上是关于使用 exec() eval() 方法时如何克服格式化字符串的限制?的主要内容,如果未能解决你的问题,请参考以下文章