8

假设我有一些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

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

4

2 回答 2

16

如果你想使用一个@validator

return v if v else doSomething

Python 将空列表的布尔值假定为 False

如果您不想使用@validator

在 Pydantic 中,使用conlist

from pydantic import BaseModel, conlist
from typing import List

class Trait(BaseModel):
    name: str
    options: conlist(str, min_items=1)
于 2020-04-27T21:23:52.847 回答
1

在 Python 中,空列表是假的,而具有任意数量元素的列表是真的:

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

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

于 2020-04-27T21:21:13.247 回答