Python中如何实现嵌套f-string的解析求值?
解决方法
你遇到的问题是因为SourceQuery本身是普通字符串,外层的f-string只会解析字符串字面量内容,不会递归解析里面的占位符。这里有几种简便的实现方式:
方法一:直接定义为f-string
最直接的方式是在定义SourceQuery时就使用f-string,占位符会被直接解析:
SourceSchema = 'myschema' SourceTable = 'mytable' SourceQuery = f'SELECT * FROM {SourceSchema}.{SourceTable}' print(SourceQuery)
执行后输出:
SELECT * FROM myschema.mytable
方法二:使用str.format()方法
如果SourceQuery是预先定义好的普通字符串(比如从配置文件读取),可以用str.format()替换占位符:
SourceSchema = 'myschema' SourceTable = 'mytable' SourceQuery = 'SELECT * FROM {SourceSchema}.{SourceTable}' # 手动传入变量 print(SourceQuery.format(SourceSchema=SourceSchema, SourceTable=SourceTable)) # 或者用**locals()自动传递当前作用域的变量 print(SourceQuery.format(**locals()))
两种方式都能得到你需要的输出。
方法三:嵌套f-string(不推荐,有安全风险)
如果必须用外层f-string的方式,可以通过eval实现,但仅当字符串完全可控时使用,避免注入风险:
SourceSchema = 'myschema' SourceTable = 'mytable' SourceQuery = 'SELECT * FROM {SourceSchema}.{SourceTable}' print(eval(f"f'{SourceQuery}'"))
内容的提问来源于stack exchange,提问作者Bala
相关产品推荐
相关产品推荐

