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

如何用side_effect模拟请求响应?遇AttributeError问题求助

解决Mock请求响应时的AttributeError问题

你之前的问题出在返回的是字典,而业务代码里是通过.status_code属性访问响应状态,字典没有这个属性,所以报错。正确的做法是返回带有对应属性的Mock对象,而不是字典。

正确实现方式

使用unittest.mock.Mock创建模拟的响应对象,给每个对象设置status_code属性,然后把这些对象放进side_effect列表里:

from unittest.mock import Mock

# 创建模拟响应对象
response_404 = Mock()
response_404.status_code = 404
# 如果你的代码需要调用response.json(),可以额外设置
response_404.json.return_value = {"error": "资源不存在"}

response_200 = Mock()
response_200.status_code = 200
response_200.json.return_value = {"data": "请求成功"}

# 赋值给mock的side_effect
mock_method.side_effect = [response_404, response_200]

简化写法

也可以直接用Mock的关键字参数一步创建:

from unittest.mock import Mock

mock_method.side_effect = [
    Mock(status_code=404, json=Mock(return_value={"error": "资源不存在"})),
    Mock(status_code=200, json=Mock(return_value={"data": "请求成功"}))
]

为什么之前的写法错误

  • 第一种写法返回字典:{"status_code": 404}是字典,只能通过["status_code"]访问,而你的代码用的是.status_code属性访问,自然报错。
  • 第二种写法直接给side_effect加属性:初始时mock_method.side_effect是None,给None设置status_code当然会触发NoneType的属性错误。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.27 14:44:54