[英]Python pydantic model passing None as int value is not a valid integer (type=type_error.integer)
我有一個 model 需要一些輸入,包括 sourceSiteId。 這是一個 integer 但也有許多值為None
。 我已經用 model 嘗試了一些事情,但是當值為None
時仍然收到value is not a valid integer (type=type_error.integer)
錯誤。 下面是我的 model。
class LatLongModel(BaseModel):
# id: str
object_id: Optional[int] = None
primo_id: Optional[int] = None
name: Optional[str] = None
entity_type: Optional[str] = None
division_id: Optional[int] = None
division: Optional[str] = None
status: Optional[str] = None
longitude: Optional[float] = None
latitude: Optional[float] = None
site_id: Optional[int] = None
source_site_id: Optional[int] = None
site_type: Optional[str] = None
我也嘗試過source_site_id: int = None
和source_site_id: Optional[int]
但沒有運氣。 我可以嘗試什么讓這個 model 接受整數以及 source_site_id 的 None 類型?
您可以嘗試通過在 model 中定義__new__
方法來查找問題。 它可能會幫助您捕獲有問題的值(空字符串或其他內容):
class LatLongModel(BaseModel):
def __new__(cls, *args, **kwargs):
for k,v in kwargs.items():
print(f"'{k}' : {v.__repr__()} ({type(v)})")
return super().__new__(cls)
# [...]
source_site_id: Optional[int] = None
l = LatLongModel(source_site_id="")
> 'source_site_id' : '' (<class 'str'>)
> Stacktrace [...] pydantic.error_wrappers.ValidationError: 1 validation error for LatLongModel
source_site_id
value is not a valid integer (type=type_error.integer)
在某些背景下,字段類型int
將嘗試將None
(或您傳入的任何內容)的值強制為int
。 您可以通過包含自定義驗證器來覆蓋此行為:
from typing import Optional
from pydantic import BaseModel, validator
class LatLongModel(BaseModel):
# id: str
object_id: Optional[int] = None
primo_id: Optional[int] = None
name: Optional[str] = None
entity_type: Optional[str] = None
division_id: Optional[int] = None
division: Optional[str] = None
status: Optional[str] = None
longitude: Optional[float] = None
latitude: Optional[float] = None
site_id: Optional[int] = None
source_site_id: Optional[int] = None
site_type: Optional[str] = None
# Custom validator here
@validator('site_id', 'source_site_id', pre=True)
def allow_none(cls, v):
if v is None:
return None
else:
return v
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.