以优雅的方式使用 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 v
或assert 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)
假设我有一些 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 v
或assert 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)