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函数的两处代码即可:
- 替换bad_actor的生成方式,直接使用本地测试网络默认提供的测试账户,无需新建
- 同时兼容捕获两种可能的异常类型,适配版本特性
修改后代码如下:
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
相关产品推荐
相关产品推荐

