如何让 Pydantic 立即引发异常
How to make Pydantic raise an exception right away
我写了一个 Pydantic 模型来验证 API 有效载荷。
有效负载有 2 个属性 emailId
作为 list
和 role
作为 str
{
"emailId": [],
"role":"Administrator"
}
我需要对属性电子邮件执行两次验证 -
emailId
不能为空。
emailId
不得包含来自 x、y、z 域的电子邮件。
因此,为了实现这一点,我为 emailId
编写了 2 个验证方法,如下所示 -
class PayloadValidator(BaseModel):
emailId: List[str]
role: str
@validator("emailId")
def is_email_list_empty(cls, email):
if not email_id:
raise ValueError("Email list is empty.")
return email_id
@validator("emailId")
def valid_domains(cls, emailId):
pass
这里的问题是,如果 emailId
列表为空,那么验证器不会立即 raise
ValueError
。它等待所有验证方法完成执行,这给我带来了一些严重的问题。
有什么办法可以实现吗?
如果您有检查,检查失败会中断进一步的验证,然后将它们放入 pre=True
root validator。因为如果 pre=True
根验证器引发错误 字段验证将不会发生 。
例如:
class PayloadValidator(BaseModel):
emailId: List[str]
role: str
@root_validator(pre=True)
def root_validate(cls, values):
if not values['emailId']:
raise ValueError("Email list is empty.")
return values
@validator("emailId")
def valid_domains(cls, emailId):
return emailId
我写了一个 Pydantic 模型来验证 API 有效载荷。
有效负载有 2 个属性 emailId
作为 list
和 role
作为 str
{
"emailId": [],
"role":"Administrator"
}
我需要对属性电子邮件执行两次验证 -
emailId
不能为空。emailId
不得包含来自 x、y、z 域的电子邮件。
因此,为了实现这一点,我为 emailId
编写了 2 个验证方法,如下所示 -
class PayloadValidator(BaseModel):
emailId: List[str]
role: str
@validator("emailId")
def is_email_list_empty(cls, email):
if not email_id:
raise ValueError("Email list is empty.")
return email_id
@validator("emailId")
def valid_domains(cls, emailId):
pass
这里的问题是,如果 emailId
列表为空,那么验证器不会立即 raise
ValueError
。它等待所有验证方法完成执行,这给我带来了一些严重的问题。
有什么办法可以实现吗?
如果您有检查,检查失败会中断进一步的验证,然后将它们放入 pre=True
root validator。因为如果 pre=True
根验证器引发错误 字段验证将不会发生 。
例如:
class PayloadValidator(BaseModel):
emailId: List[str]
role: str
@root_validator(pre=True)
def root_validate(cls, values):
if not values['emailId']:
raise ValueError("Email list is empty.")
return values
@validator("emailId")
def valid_domains(cls, emailId):
return emailId