Python虚拟环境中Web3通过HTTPProvider调用ENS功能异常如何解决
报错1:AttributeError: type object 'ENS' has no attribute 'fromWeb3' 解决方案
该报错由web3.py版本不兼容导致:
- web3.py v5.x版本支持
ENS.fromWeb3(w3)写法 - web3.py v6.x及以上版本将该方法重命名为蛇形格式
ENS.from_web3(w3),也可以直接用简化初始化写法:ns = ENS(provider=w3.provider)
报错2:Windows VSCode环境下ENS查询始终返回None解决方案
相同代码在Colab可正常运行,说明代码逻辑无问题,问题出在本地环境配置,按以下步骤排查:
- 对齐依赖版本
首先确认本地虚拟环境和Colab的web3、ens库版本是否一致,执行以下命令查看版本:
pip show web3 ens
如版本差异过大,可统一安装稳定兼容版本:
pip install web3==5.31.4 ens==0.8.1
- 手动指定ENS主网注册表地址
本地环境可能存在ENS注册表地址自动识别失败的问题,修改初始化代码手动填入主网固定ENS注册表地址即可:
from web3 import Web3 from ens import ENS from ens.constants import ENS_MAINNET_ADDR w3 = Web3(Web3.HTTPProvider('https://mainnet.infura.io/v3/替换为你的Infura API密钥')) ns = ENS(provider=w3.provider, addr=ENS_MAINNET_ADDR) address = ns.address('test.eth') print(address)
- 排查网络与内核问题
- 检查Windows防火墙是否拦截了Infura节点请求,或者封禁了ENS解析依赖的UDP 53端口
- 重启VSCode的Jupyter内核,清除缓存后重新运行代码
内容的提问来源于stack exchange,提问作者Lucas Pontes de Oliveira
相关产品推荐
相关产品推荐

