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

过滤PokeAPI宝可梦招式数据及URLError报错排查

宝可梦PokeAPI数据处理报错排查与修复

报错核心原因

  1. 变量误用:生成器__evo_generatortwo里把self.moves当成URL传给request.Request,但self.moves是API返回的字典数据(包含abilities等字段),不是合法URL,导致urllib无法解析,抛出unknown url type错误。
  2. 函数调用不匹配:主代码调用的是__evo_generator(move, 'move'),但实际定义的生成器是__evo_generatortwo,而且该生成器没有参数,主代码却传了两个参数,调用逻辑混乱。
  3. 需求逻辑偏差:当前生成器用any判断招式是否存在符合条件的学习记录,但你的需求是移除version_group_details中不符合条件的项,不是只筛选存在符合项的招式,逻辑不符。

修复后的代码示例

主逻辑处理(基于已获取的API数据)

# 假设self.moves已经是从API获取的可达鸭完整数据字典
filtered_moves = []
for move_item in self.moves['moves']:
    # 过滤当前招式的version_group_details,只保留等级学习且等级>0的记录
    valid_learn_details = [
        detail for detail in move_item['version_group_details']
        if detail['level_learned_at'] > 0 and detail['move_learn_method']['name'] == 'level-up'
    ]
    if valid_learn_details:
        # 保留招式信息并替换过滤后的学习记录
        cleaned_move = move_item.copy()
        cleaned_move['version_group_details'] = valid_learn_details
        filtered_moves.append(cleaned_move)
return filtered_moves

完整API请求+处理流程

import urllib.request as request
from json import loads

def get_golduck_level_up_moves():
    # 正确的可达鸭API地址
    api_url = "https://pokeapi.co/api/v2/pokemon/golduck/"
    req = request.Request(
        api_url,
        headers={
            'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/35.0.1916.47 Safari/537.36'
        }
    )
    with request.urlopen(req) as response:
        golduck_data = loads(response.read())
    
    filtered_moves = []
    for move_entry in golduck_data['moves']:
        # 过滤符合要求的学习记录
        valid_details = [
            d for d in move_entry['version_group_details']
            if d['level_learned_at'] > 0 and d['move_learn_method']['name'] == 'level-up'
        ]
        if valid_details:
            # 整理成表格需要的格式(可按需调整)
            table_entry = {
                '招式名称': move_entry['move']['name'],
                '学习等级': [d['level_learned_at'] for d in valid_details],
                '对应版本': [d['version_group']['name'] for d in valid_details]
            }
            filtered_moves.append(table_entry)
    return filtered_moves

# 调用示例
level_moves = get_golduck_level_up_moves()
for item in level_moves:
    print(f"{item['招式名称']} | 等级:{item['学习等级']} | 版本:{item['对应版本']}")

关键修复说明

  • 明确数据类型:把API返回的字典数据和请求用的URL彻底区分开,请求时必须传入字符串格式的合法URL。
  • 统一函数调用:确保调用的函数名和参数定义完全匹配,避免拼写错误或参数不一致问题。
  • 修正过滤逻辑:直接遍历version_group_details列表过滤掉不符合条件的项,而不是仅判断是否存在符合项,这样得到的结果才是符合等级提升招式表格需求的干净数据。

内容的提问来源于stack exchange,提问作者ehrgein

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 16:51:37