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

如何按episodeID对示例XML中的剧集排序并解决现有代码报错

问题原因分析

你的代码存在3个核心错误,共同触发了本次报错:

  • sorted的key参数使用错误:你直接调用了get_episode_id(series_container),而key需要接收一个可调用对象,排序时会自动把每个待排序的元素作为参数传入这个函数
  • 节点查找路径错误:你直接在seriesItems父节点下查找episodeID,但episodeID是seriesItem子节点的下级节点,找不到节点就会返回None,调用.text属性就触发了AttributeError
  • 自定义函数缺少return语句:get_episode_id没有写return语句,就算没有路径错误也只会返回None,无法作为排序依据
修复后的完整代码
import xml.etree.ElementTree as ET

def get_episode_id(series_item):
    # 入参为单个seriesItem节点,返回其下episodeID的文本值
    return series_item.find("episodeID").text

tree = ET.parse("question.xml")
series_containers = tree.findall(".//series_meta_data/seriesItems")

for series_container in series_containers:
    # key直接传入函数对象,sorted会自动把每个seriesItem作为参数传入
    series_container[:] = sorted(series_container, key=get_episode_id)

# 写入时指定编码避免乱码,保留xml声明更规范
tree.write("new.xml", encoding="utf-8", xml_declaration=True)

你也可以用lambda表达式简化写法,不需要单独定义函数:

for series_container in series_containers:
    series_container[:] = sorted(series_container, key=lambda x: x.find("episodeID").text)

S01E01这类季集编号的字符串本身字典序就和季、集的正序规则一致,直接排序即可得到你需要的结果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 09:36:07