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

pytest运行Brownie合约测试报AttributeError: 'NoneType'无'_with_attr'属性

问题解决方案

根因说明

该错误和accounts.add()无关,是Brownie v1.17.1版本的已知兼容性bug:在处理Ganache CLI返回的交易revert结果时,Brownie内部的异常对象exc没有被正确赋值,仍然为None,调用_with_attr方法时就触发了AttributeError。

修复方案

方案1:快速修改测试代码(无需升级依赖)

修改test_only_owner_can_withdraw函数的两处代码即可:

  1. 替换bad_actor的生成方式,直接使用本地测试网络默认提供的测试账户,无需新建
  2. 同时兼容捕获两种可能的异常类型,适配版本特性

修改后代码如下:

def test_only_owner_can_withdraw():
    if network.show_active() not in LOCAL_BLOCKCHAIN_ENVIRONMENTS:
        pytest.skip("only for local testing")
    fund_me = deploy_fund_me()
    # 替换为本地默认生成的第二个测试账户,accounts[0]为合约所有者
    bad_actor = accounts[1]
    # 同时捕获两种异常,兼容版本问题
    with pytest.raises((exceptions.VirtualMachineError, ValueError)):
        fund_me.withdraw({"from": bad_actor})

方案2:升级Brownie到修复版本

直接运行命令升级到已修复该bug的Brownie版本即可:

pip install eth-brownie==1.19.3

升级完成后重新运行测试,原有代码无需修改即可正常执行。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.23 16:54:02