循环调用Pokemon API取值并保存到txt文件的实现问题
解决方案
你使用的Pokemon API 单接口仅支持传入单个宝可梦ID查询对应数据,你当前代码直接把整个ID列表传入URL格式化参数,无法生成有效请求地址,同时文件写入环节直接传入列表对象也会触发类型错误。
核心问题点
- 未遍历生成的ID列表逐个构造请求,直接传入整个列表导致URL无效
write()方法仅支持字符串类型入参,直接写入列表对象会报错- 缺少接口请求状态校验,遇到请求失败时会直接抛出JSON解析异常
修正后完整代码
import random import requests from pprint import pprint # 生成6个1-10区间的宝可梦ID pokemon_ids = [random.randint(1, 10) for _ in range(6)] all_pokemon = [] request_url_template = 'https://pokeapi.co/api/v2/pokemon/{}/' # 遍历ID逐个发起请求 for poke_id in pokemon_ids: resp = requests.get(request_url_template.format(poke_id)) if resp.status_code == 200: poke_data = resp.json() all_pokemon.append(poke_data) pprint(poke_data) # 写入txt文件 with open('pokemon.txt', 'w', encoding='utf-8') as f: for index, poke in enumerate(all_pokemon, 1): # 可按需调整要保存的字段,下方为示例字段 f.write(f"===== 第{index}只宝可梦 =====\n") f.write(f"ID: {poke['id']}\n") f.write(f"名称: {poke['name']}\n") f.write(f"身高: {poke['height']} 分米\n") f.write(f"体重: {poke['weight']} 百克\n\n")
关键逻辑说明
- 遍历ID列表时,每轮取单个ID拼接成合法请求地址,再发起接口调用
- 新增状态码校验,仅当请求成功(状态码200)时才解析返回的JSON数据,避免无效请求导致程序崩溃
- 写入文件时将宝可梦数据格式化为可读的字符串结构,你可以根据需求从返回的JSON中提取属性、技能、特性等其他字段保存
如果需要保存完整的原始接口返回数据,可将文件写入逻辑替换为
f.write(str(all_pokemon)),但该方式保存的内容可读性较差。
内容的提问来源于stack exchange,提问作者codingperson
相关产品推荐
相关产品推荐

