Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/282.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Pydantic-如何拥有一个;“可选”;字段,但如果存在,是否需要符合非无值?_Python_Python 3.x_Pydantic - Fatal编程技术网

Python Pydantic-如何拥有一个;“可选”;字段,但如果存在,是否需要符合非无值?

Python Pydantic-如何拥有一个;“可选”;字段,但如果存在,是否需要符合非无值?,python,python-3.x,pydantic,Python,Python 3.x,Pydantic,我试图验证一个对象,该对象具有“可选”字段,即它们可能存在也可能不存在。但是当它们存在时,字段应该符合特定的类型定义(而不是无) 在下面的示例中,“大小”字段是可选的,但不允许。我希望“size”字段是可选的,但如果存在,它应该是一个float from pydantic import BaseModel class Foo(BaseModel): count: int size: float = None # how to make this an optional flo

我试图验证一个对象,该对象具有“可选”字段,即它们可能存在也可能不存在。但是当它们存在时,字段应该符合特定的类型定义(而不是无)

在下面的示例中,“大小”字段是可选的,但不允许。我希望“size”字段是可选的,但如果存在,它应该是一个float

from pydantic import BaseModel

class Foo(BaseModel):
    count: int
    size: float = None  # how to make this an optional float? 

 >>> Foo(count=5)
 Foo(count=5, size=None)  # GOOD - "size" is not present, value of None is OK


 >>> Foo(count=5, size=None)
 Foo(count=5, size=None) # BAD - if field "size" is present, it should be a float

 # BONUS
 >>> Foo(count=5)
 Foo(count=5)  # BEST - "size" is not present, it is not required to be present, so we don't care about about validating it all.  We are using Foo.json(exclude_unset=True) handles this for us which is fine.

这是可能的,做一个

来自pydantic导入BaseModel、ValidationError、validator
Foo类(基本模型):
计数:int
大小:浮动=无
@验证器('大小')
def大小是一些(cls,v):
如果v为无:
raise VALUERROR('无法将大小设置为None')
返回浮动(v)
这将按预期工作:

Foo(计数=5) Foo(计数=5,大小=无) >>>Foo(计数=5,大小=1.6) Foo(计数=5,大小=1.6) >>>Foo(计数=5,大小=无) 回溯(最近一次呼叫最后一次): 文件“”,第1行,在 文件“[venv]/lib/python3.6/site-packages/pydantic/main.py”,第283行,在__ 引发验证错误 pydantic.error\u wrappers.ValidationError:Foo的1个验证错误 大小 无法将大小设置为无(类型=值\u错误)
如果运行mypy,它会抱怨size:float=None,因为它没有定义为可选的[float]