以优雅的方式使用 Pydantic 检查 List 是否不为空

Check if List is not empty with Pydantic in an elegant way

假设我有一些 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 中,空列表为假,而包含任意数量元素的列表为真:

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

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

如果你想使用 @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)