Python迭代API数据发PUT请求报TypeError:'int'对象不可迭代错误
报错根因
你的代码有两个核心问题直接触发该报错:
- 接口返回值处理错误:
response.content拿到的是原始响应字节串(bytes类型),并非解析后的结构化接口数据。你通过索引data[i]取值时,拿到的是单个字节对应的整数值,完全不是接口返回的单条帖子内容。 - 请求传参错误:
requests库发送PUT请求时,会尝试遍历你传入的data参数构造请求体,你传入的是单个整数,库无法遍历整数,就会抛出TypeError: 'int' object is not iterable错误,和错误栈的触发位置完全匹配。
修复方案
按照以下步骤调整代码即可:
- 替换响应解析逻辑:用
response.json()直接把接口返回的JSON数组解析为Python列表,列表内每个元素就是单条帖子的字典数据,不要使用原始字节串response.content做迭代。 - 调整迭代逻辑:直接遍历解析后的列表,需要索引时用
enumerate获取即可,不要通过字节长度生成索引去取单个字节。 - 修正PUT请求传参:发送单条数据时使用
json参数传值,requests会自动完成JSON序列化和请求头设置,避免传值类型错误。
修正后完整代码
import requests # 拉取源数据 response = requests.get('https://jsonplaceholder.typicode.com/posts') data = response.json() # 正确解析JSON为列表 # 迭代发送到自有服务器 # 注意:BASE变量值末尾要带斜杠,例如 "http://your-server-ip:port/" for index, item in enumerate(data): put_resp = requests.put(f"{BASE}status/{index}", json=item) print(put_resp.json())
注意事项
- 请确认
BASE变量末尾带有路径斜杠,否则会出现路径拼接错误,例如BASE = "http://127.0.0.1:8000"时,拼接后路径会变成错误的http://127.0.0.1:8000status/0。 - 如果你必须使用
data参数传值而非json参数,需要提前用json.dumps()把字典数据转成JSON字符串,同时手动添加Content-Type: application/json请求头,否则自有服务端可能无法正确解析请求体。
内容的提问来源于stack exchange,提问作者wondergrandma
相关产品推荐
相关产品推荐

