You need to enable JavaScript to run this app. Python GraphQL客户端传递变量时触发Unexpected punctuator错误求助
优惠活动
大模型
产品
解决方案
定价
更多

Python GraphQL客户端传递变量时触发Unexpected punctuator错误求助

根因排查与修正方案

两个核心问题导致了连续的报错,没有涉及客户端本身的兼容问题:

  • 第一处触发「意外标点符」的直接原因是查询语法结构不符合GraphQL解析规则。GraphQL要求操作级的变量定义必须紧跟在显式声明的操作类型(query/mutation/subscription)后方,不能在整个查询文档的最开头直接放置变量定义块。你当前的写法是换行后直接以左括号开头写($contract: Int!),解析器在文档第二行第一列的位置,期待看到的是查询操作标识、或者代表查询主体的大括号,碰到左括号自然会抛出标点符匹配错误,和报错日志指向的位置完全吻合。
  • 第二处隐藏的类型不匹配问题:你传入的contract是42位长度的十六进制以太坊地址,属于字符串类值,但你将对应变量定义为Int!(非空整数类型),哪怕修正了语法结构,后续请求也会触发字段类型校验失败。

修正后的可运行代码

调整为标准的GraphQL查询结构,同时修正变量类型定义:

contract = "0xdAC17F958D2ee523a2206206994597C13D831ec7"

query = """
query GetTokenInfo($contract: String!) {
  token(id: $contract) {
    name
    symbol
    decimals
    derivedETH
    tradeVolumeUSD
    totalLiquidity
  }
}
"""

variables = {
    "contract": contract
}

data = client.execute(query=query, variables=variables)

补充校验提示:写GraphQL查询时两种风格不能混拼:要么省略所有操作标识、直接以大括号开头写查询主体,此时不能附带任何变量定义;要么完整带上query 自定义操作名(变量定义)的标准结构,就不会出现解析层面的报错。


内容的提问来源于stack exchange,提问作者Marcus

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.30 17:06:05