【问题标题】:Check if List is not empty with Pydantic in an elegant way以优雅的方式使用 Pydantic 检查 List 是否为空
【发布时间】:2020-08-11 13:53:23
【问题描述】:

假设我有一些BaseModel,我想检查它的options 列表是否为空。我可以用validator 完美做到这一点:

class Trait(BaseModel):
    name: str
    options: List[str]

    @validator("options")
    def options_non_empty(cls, v):
        assert len(v) > 0
        return v

还有其他更优雅的方法吗?

【问题讨论】:

  • 我不是很清楚:我不想缩小验证器函数的大小,我想找到一种根本不使用它的方法。

标签: python pydantic


【解决方案1】:

如果你想使用@validator:

return v if v else doSomething

Python 将 boolean-ess 假设为 False

如果您不想使用@validator:

在 Pydantic 中,使用 conlist:

from pydantic import BaseModel, conlist
from typing import List

class Trait(BaseModel):
    name: str
    options: conlist(str, min_items=1)

【讨论】:

  • return v if v 在语法上是否正确?我错过了什么?
  • 不是,它是为了暗示else someOtherExpression。 OP 我相信,对我的conlist 答案很感兴趣。
【解决方案2】:

在 Python 中,空列表为假,而包含任意数量元素的列表为真:

>>> bool([])
False
>>> bool([1,2,3])
True
>>> bool([False])
True
>>> bool([[]])
True

这意味着您可以简单地通过assert v 或assert Trait.options 来确认该列表是非空的。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-09-11
    • 1970-01-01
    • 1970-01-01
    • 2011-03-28
    • 1970-01-01
    • 2015-06-10
    • 2012-11-04
    • 2023-03-15
    相关资源
    最近更新 更多