Python中含大括号的GraphQL查询如何用f-string进行变量插值
解决Python f-string与GraphQL大括号的语法冲突
当然不用完全放弃f-string!Python的f-string提供了非常直观的方式来处理这类冲突:用双重大括号{{和}}来表示普通的单个大括号。
问题出在哪?
你遇到的SyntaxError,是因为f-string会把单个的{和}当成插值表达式的边界标记。而GraphQL查询里的大量大括号,被f-string误判成了未完成的插值语法,自然就触发报错了。
修正后的代码示例
只需要把GraphQL查询中所有不需要插值的大括号替换成双份,需要插入变量的地方保留单重大括号就行:
number = 10 owner = "me" name = "my_repo" query = f""" query {{ repository(owner:"{owner}", name:"{name}") {{ pullRequests(first: {number}) {{ edges {{ node {{ state merged createdAt }} }} }} }} }} """
这样处理后,f-string会自动把{{解析为输出单个{,}}解析为输出单个},而{owner}、{name}、{number}这些变量依然会正常完成插值替换。
其他可选思路(供参考)
如果你想试试别的方式,也有两种选择:
- 使用
str.format():把查询里的变量换成{0}、{1}这类占位符,再调用format(owner, name, number),这种方式不用处理双重大括号,但可读性不如f-string。 - 使用
string.Template:用$owner这样的标记表示变量,完全避开大括号冲突,但语法相对繁琐,适合复杂场景。
不过最推荐的还是双重大括号的f-string方案——既保留了f-string的简洁性,又完美解决了GraphQL的大括号冲突问题。
内容的提问来源于stack exchange,提问作者Piotr Zakrzewski
相关产品推荐
相关产品推荐

