You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.11 07:53:15