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

使用pydantic-xml加载递归文件夹模型时遇递归深度超限错误

解决pydantic-xml递归读取文件夹XML时的RecursionError问题

问题场景

读取嵌套文件夹结构的XML文件时触发递归错误,错误信息:

RecursionError: maximum recursion depth exceeded in comparison

简化后的XML结构:

<Folder Name="rootfolder">
    <Folder Name="subfolder">
        <Folder Name="subsubfolder"></Folder>
    </Folder>
    <Folder Name="subfolder">
        <Folder Name="subsubfolder"></Folder>
    </Folder>
</Folder>

使用的代码(基于pydantic-xml库):

from __future__ import annotations

class Folder(BaseXmlModel, tag="Folder"):
    name: Optional[str] = attr(name='Name')
    folder:  Optional[List[Folder]] = element(tag='Folder')

Folder.update_forward_refs()

此前用原生Pydantic处理同结构JSON时运行正常。

解决方案

调整模型字段定义,给子文件夹列表设置默认值,并规范字段名:

from __future__ import annotations
from typing import Optional, List
from pydantic_xml import BaseXmlModel, attr, element

class Folder(BaseXmlModel, tag="Folder"):
    name: Optional[str] = attr(name='Name')
    folders: Optional[List[Folder]] = element(tag='Folder', default=None)

原因说明

  • 原生Pydantic处理JSON的递归引用逻辑与pydantic-xml存在差异,后者需要显式设置默认值,避免递归实例化时触发无限递归。
  • 原代码中未给子文件夹字段设置默认值,解析时即使没有子文件夹,也会尝试递归创建实例,最终触发递归深度限制。
  • 将字段名改为复数形式folders,既符合语义,也避免与类名Folder产生潜在混淆。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 03:30:51