python - 如何将变量评估为 Python f 字符串
问题描述
我想要一种机制来评估一个 f 字符串,其中要评估的内容是在一个变量中提供的。例如,
x=7
s='{x+x}'
fstr_eval(s)
对于我想到的用例,字符串s
可能来自用户输入(用户信任的地方eval
)。
虽然eval
在生产中使用通常是非常糟糕的做法,但也有明显的例外。例如,用户可能是在本地机器上工作的 Python 开发人员,他想使用完整的 Python 语法来开发 SQL 查询。
关于重复的注意事项:这里和这里有类似的问题。第一个问题是在模板的有限上下文中提出的。第二个问题虽然与这个问题非常相似,但已被标记为重复。因为这个问题的上下文与第一个问题有很大不同,所以我决定根据第二个问题之后自动生成的建议提出第三个问题:
这个问题之前有人问过,并且已经有了答案。如果这些答案不能完全解决您的问题,请提出一个新问题。
解决方案
即使是受信任的用户,使用eval
也只能是最后的手段。
如果您愿意牺牲语法的灵活性以获得更多的安全性和控制力,那么您可以使用str.format
并提供您的整个范围。
这将不允许对表达式进行评估,但单个变量将被格式化为输出。
代码
x = 3
y = 'foo'
s = input('> ')
print(s.format(**vars()))
例子
> {x} and {y}
3 and foo
推荐阅读
- react-native - 尝试在 react-native 中设置选项卡时出错
- json - Dask 如何使用字典列表打开 json
- kubernetes - minikube 启动失败
- visual-studio-app-center - VS AppCenter - XCUI - 无法分析 MachO 文件错误
- powershell - Powershell比较两个文件夹并显示文件不在两者中都显示文件?
- javascript - React/API/Chart.js:期望一个赋值或函数调用,而是看到一个表达式
- c++ - 类模板参数默认值
- amazon-web-services - 向在 AWS Cognito 控制台中创建的用户添加自定义属性
- r - 基于类似重复出现的条件列创建
- r - 使用 R 匹配数据框中的复杂字符串名称