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

Web3.py 6.10+Python3.11调用Polygon钱包nonce功能报错求助

问题:Polygon环境下Web3.py调用get_transaction_count失败

我使用Web3.py 6.10版本搭配Python 3.11,想要读取Polygon钱包的nonce(交易计数)和余额。目前已成功建立与RPC节点的连接,获取区块、验证地址等基础功能均可正常运行,但调用get_transaction_count方法时失败。该代码在Python 3.10+Goerli以太坊环境下可正常工作,在Polygon+Python3.11环境下抛出错误:
parsimonious.exceptions.VisitationError: TypeError: isinstance() arg 2 must be a type, a tuple of types, or a union

相关代码

from web3 import Web3
from web3.gas_strategies.time_based import slow_gas_price_strategy

# 配置Web3连接Polygon
rpc_url = "https://polygon-mainnet.infura.io/v3/{Key}"
account = "0x..."

web3 = Web3(Web3.HTTPProvider(rpc_url))
web3.middleware_onion.inject(geth_poa_middleware, layer=0)

...

if __name__ == "__main__":
    latest_block = web3.eth.get_block('latest') # 正常运行
    print(f"chainId: {web3.eth.chain_id}") # 正常运行
    print(f"The latest block number is:{web3.eth.block_number}") # 正常运行
    res = web3.is_connected()
    print(f"connected: {res}") # 正常运行
    is_address_valid = web3.is_address(account)
    print(f"valid address {account}: {res}") # 正常运行

    nonce = web3.eth.get_transaction_count(web3.to_checksum_address(account)) # 执行失败
    print(f"nonce {account}")

报错堆栈

File "C:\Users\User\PycharmProjects\Project\venv_311\Lib\site-packages\web3\eth\eth.py", line 451, in get_transaction_count
    return self._get_transaction_count(account, block_identifier)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "C:\Users\User\PycharmProjects\Project\venv_311\Lib\site-packages\web3\module.py", line 64, in caller
    (method_str, params), response_formatters = method.process_params(
                                                ^^^^^^^^^^^^^^^^^^^^^^
  File "C:\Users\User\PycharmProjects\Project\venv_311\Lib\site-packages\web3\method.py", line 233, in process_params
    _apply_request_formatters(params, self.request_formatters(method)),
    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "C:\Users\User\PycharmProjects\Project\venv_311\Lib\site-packages\eth_utils\functional.py", line 45, in inner
    return callback(fn(*args, **kwargs))
                    ^^^^^^^^^^^^^^^^^^^
  File "C:\Users\User\PycharmProjects\Project\venv_311\Lib\site-packages\web3\method.py", line 55, in _apply_request_formatters
    formatted_params = pipe(params, request_formatters)
                       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "cytoolz\\functoolz.pyx", line 680, in cytoolz.functoolz.pipe
  File "cytoolz\\functoolz.pyx", line 655, in cytoolz.functoolz.c_pipe
  File "cytoolz\\functoolz.pyx", line 518, in cytoolz.functoolz.Compose.__call__
  File "cytoolz\\functoolz.pyx", line 263, in cytoolz.functoolz.curry.__call__
  File "C:\Users\User\PycharmProjects\Project\venv_311\Lib\site-packages\web3\_utils\abi.py", line 746, in map_abi_data
    return pipe(data, *pipeline)
           ^^^^^^^^^^^^^^^^^^^^^
  File "cytoolz\\functoolz.pyx", line 680, in cytoolz.functoolz.pipe
  File "cytoolz\\functoolz.pyx", line 655, in cytoolz.functoolz.c_pipe
  File "cytoolz\\functoolz.pyx", line 263, in cytoolz.functoolz.curry.__call__
  File "C:\Users\User\PycharmProjects\Project\venv_311\Lib\site-packages\web3\_utils\abi.py", line 760, in abi_data_tree
    return [
           ^
  File "C:\Users\User\PycharmProjects\Project\venv_311\Lib\site-packages\web3\_utils\abi.py", line 761, in <listcomp>
    abi_sub_tree(data_type, data_value)
  File "C:\Users\User\PycharmProjects\Project\venv_311\Lib\site-packages\web3\_utils\abi.py", line 814, in abi_sub_tree
    abi_type = parse(type_str_or_abi_type)
               ^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "C:\Users\User\PycharmProjects\Project\venv_311\Lib\site-packages\eth_abi\grammar.py", line 123, in parse
    return super().parse(type_str, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "C:\Users\User\PycharmProjects\Project\venv_311\Lib\site-packages\parsimonious\nodes.py", line 252, in parse
    return self._parse_or_match(text, pos, 'parse')
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "C:\Users\User\PycharmProjects\Project\venv_311\Lib\site-packages\parsimonious\nodes.py", line 287, in _parse_or_match
    return self.visit(getattr(self.grammar, method_name)(text, pos=pos))
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "C:\Users\User\PycharmProjects\Project\venv_311\Lib\site-packages\parsimonious\nodes.py", line 213, in visit
    return method(node, [self.visit(n) for n in node])
                        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "C:\Users\User\PycharmProjects\Project\venv_311\Lib\site-packages\parsimonious\nodes.py", line 213, in <listcomp>
    return method(node, [self.visit(n) for n in node])
                         ^^^^^^^^^^^^^
  File "C:\Users\User\PycharmProjects\Project\venv_311\Lib\site-packages\parsimonious\nodes.py", line 213, in visit
    return method(node, [self.visit(n) for n in node])
                        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "C:\Users\User\PycharmProjects\Project\venv_311\Lib\site-packages\parsimonious\nodes.py", line 213, in <listcomp>
    return method(node, [self.visit(n) for n in node])
                         ^^^^^^^^^^^^^
  File "C:\Users\User\PycharmProjects\Project\venv_311\Lib\site-packages\parsimonious\nodes.py", line 225, in visit
    raise VisitationError(exc, exc_class, node) from exc
parsimonious.exceptions.VisitationError: TypeError: isinstance() arg 2 must be a type, a tuple of types, or a union

解决方案

  • 问题根源:错误由eth-abi库版本与Python3.11不兼容导致,Web3.py 6.10依赖的旧版eth-abi在Python3.11下解析ABI类型时会触发isinstance参数错误。
  • 修复步骤:
    1. 升级eth-abi到兼容Python3.11的最新版本,执行命令:
      pip install --upgrade eth-abi
      
    2. 也可以直接指定最低兼容版本:
      pip install eth-abi>=4.0.0
      
    3. 升级完成后重新运行代码,get_transaction_count和余额查询(web3.eth.get_balance(web3.to_checksum_address(account)))均可正常执行。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.10 01:15:56