与Pydantic验证递归结合

发布于 2025-01-26 08:45:51 字数 873 浏览 1 评论 0原文

考虑以下列表:

from pydantic.dataclasses import dataclass
from typing import Tuple, Union

@dataclass
class A:
    name: str
    collection: Tuple[Union["A", int], ...]

A.__pydantic_model__.update_forward_refs()

# Does not work:
c = A("name", (A("a", tuple()), 42,))

创建a的实例时,验证失败了:

pydantic.error_wrappers.ValidationError: 2 validation errors for A
collection -> 0
  value is not a valid dict (type=type_error.dict)
collection -> 0
  value is not a valid integer (type=type_error.integer)

此处的问题是pydantic不考虑a是验证a的实例时,有效的项目。例如,如果我删除a项目,则验证可以通过:

# Works fine:
c = A("name", (42,))

这是一个错误吗?如何使用pydantic验证递归工会?

Consider the following listing:

from pydantic.dataclasses import dataclass
from typing import Tuple, Union

@dataclass
class A:
    name: str
    collection: Tuple[Union["A", int], ...]

A.__pydantic_model__.update_forward_refs()

# Does not work:
c = A("name", (A("a", tuple()), 42,))

When an instance of A is created, validation fails with:

pydantic.error_wrappers.ValidationError: 2 validation errors for A
collection -> 0
  value is not a valid dict (type=type_error.dict)
collection -> 0
  value is not a valid integer (type=type_error.integer)

The issue here is that pydantic does not consider A to be a valid item when validating an instance of A. For instance, if I remove the A item, validation passes just fine:

# Works fine:
c = A("name", (42,))

Is this a bug? How do I validate recursive unions with pydantic?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文