Tine789 2022-04-12 18:18 采纳率: 100%
浏览 34
已结题

python报错:TypeError: 'Food' object is not iterable

问题遇到的现象和发生背景

最近写接口自动化遇到两次TypeError: 'Food' object is not iterable报错,把自己得理解分享出来,供大家参考,有不足之处欢迎大家补充。

问题相关代码,请勿粘贴截图

相关代码:
class baseAPI:
def query(self,indata):
resp = self.request_send(self,params=indata)
return resp

报错部分:
from baseAPI import baseAPI
class Food(baseAPI):
def listfood(self,foodInData):
resp = super(Food,self).query(foodInData)
return resp
if name=="main":
from practise.utils.handle_path import projectPath
from practise.libs.Login import Login
filepath = rf"{projectPath}/data/123.jpeg"
data = {'username': "th0469", 'password': '123456'}
cook=Login().login(data)['data']["token"]
foodindata={"page":1,"limit":1}
fd=Food(cook)
resp=fd.listfood(foodindata)
print(resp)

运行结果及报错内容

Traceback (most recent call last):
File "L:\gitlab_local_liurencheng\shopping\practise\libs\Food.py", line 21, in
resp=fd.listfood(foodindata)
File "L:\gitlab_local_liurencheng\shopping\practise\libs\Food.py", line 11, in listfood
resp = super(Food,self).query(foodInData)
File "L:\gitlab_local_liurencheng\shopping\practise\common\baseAPI.py", line 64, in query
resp = self.request_send(self,params=indata)
File "L:\gitlab_local_liurencheng\shopping\practise\common\baseAPI.py", line 34, in request_send
resp = requests.request(method=method, url=url, data=data,headers=self.header,params=params,files=file)
File "Z:\pythonProject\venv\Lib\site-packages\requests\api.py", line 61, in request
return session.request(method=method, url=url, **kwargs)
File "Z:\pythonProject\venv\Lib\site-packages\requests\sessions.py", line 542, in request
resp = self.send(prep, **send_kwargs)
File "Z:\pythonProject\venv\Lib\site-packages\requests\sessions.py", line 655, in send
r = adapter.send(request, **kwargs)
File "Z:\pythonProject\venv\Lib\site-packages\requests\adapters.py", line 469, in send
for i in request.body:
TypeError: 'Food' object is not iterable

我的解答思路和尝试过的方法

问题是self.request_send(self,params=indata)出错。
方法一:去掉self;
方法二:indata要传给params,否则报错,比如写成data=indata

我想要达到的结果

这个问题去掉self就可以

  • 写回答

1条回答 默认 最新

  • 溪风沐雪 2022-04-12 18:31
    关注

    1、resp = self.request_send(self,params=indata),函数前加self表示调用的是类自身的函数,你的baseAPI中根本没有request_send函数,自然不能加self,不加self调用的就是你系统本身的函数或者引入的函数库中的函数,只要系统中存在,就可以用。
    2、params=indata必须这么写是因为request_send函数里有一个变量名就是params,你可以简写为request_send(self,indata),把参数名去掉,一般是没问题的,除非参数数量有出入,那就需要加参数名才对了

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

问题事件

  • 系统已结题 4月22日
  • 已采纳回答 4月14日
  • 创建了问题 4月12日

悬赏问题

  • ¥15 腾讯云如何建立同一个项目中物模型之间的联系
  • ¥30 VMware 云桌面水印如何添加
  • ¥15 用ns3仿真出5G核心网网元
  • ¥15 matlab答疑 关于海上风电的爬坡事件检测
  • ¥88 python部署量化回测异常问题
  • ¥30 酬劳2w元求合作写文章
  • ¥15 在现有系统基础上增加功能
  • ¥15 远程桌面文档内容复制粘贴,格式会变化
  • ¥15 这种微信登录授权 谁可以做啊
  • ¥15 请问我该如何添加自己的数据去运行蚁群算法代码