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

循环调用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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.30 07:42:18