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

此篇博客记录了在使用Python进行API调用时遇到的问题,Food类实例化对象在调用listfood方法时引发了TypeError,因为试图迭代非可迭代对象。详细展示了如何调试并解决'Food'对象不是可迭代类型的问题,可能涉及类设计和网络请求库的使用。

Traceback (most recent call last):
  File "L:\gitlab_local_liurencheng\shopping\practise\libs\Food.py", line 21, in <module>
    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

 

 

### Python `TypeError: 'module' object is not callable` 错误解决方案 当遇到 `TypeError: 'module' object is not callable` 这种错误时,通常意味着尝试调用一个模块对象作为函数。这可能是由于不正确的导入方式引起的[^1]。 #### 原因分析 此错误的主要原因在于混淆了模块和可调用的对象之间的区别。如果有一个名为 `example.py` 的文件,并且其中定义了一个类或函数也叫 `example`,那么在其他地方试图通过 `import example` 并立即使用它来创建实例或执行操作将会引发上述异常[^3]。 #### 解决方法 为了修正这个问题,可以采取以下几种措施之一: - **更正导入语句**:确保只导入所需的特定组件而非整个包。例如,如果有如下结构: ```plaintext mypackage/ __init__.py trainer.py (内含 Trainer 类) ``` 应该这样导入并使用: ```python from mypackage.trainer import Trainer t = Trainer() # 正确的方式 ``` - **重命名冲突项**:避免将 `.py` 文件的名字设置得与内部定义的任何类相同。比如上面提到的情况中,最好更改 `trainer.py` 或者 `Trainer` 类其中之一的名字以消除歧义。 - **检查是否有同名变量覆盖了原意使用的模块/函数**: 如果不小心在一个作用域里重新赋值给了某个名字相同的变量, 可能会意外地掩盖掉原本想要访问的那个真正的目标. ```python # 不好的做法 - 导致 TypeError import math as m m = "string value" print(m.sqrt(9)) # 将抛出 AttributeError 因为现在 m 是字符串不是 module # 改善后的版本 from math import sqrt result = sqrt(9) # 成功计算平方根 ```
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值