FastAPI/Pydantic 在使用 MyPy 的项目中
FastAPI/Pydantic in a project with MyPy
我目前正在学习 fastAPI 教程,我的环境设置有 black、flake8、bandit 和 mypy。本教程中的所有内容都运行良好,但我一直不得不 # type: ignore things 让 mypy 合作。
class Item(BaseModel):
name: str
description: str = None
price: float
tax: float = None
@app.post("/items/")
async def create_items(item: Item) -> Item:
return item
Mypy 然后错误:
❯ mypy main.py [14:34:08]
main.py:9: error: Incompatible types in assignment (expression has type "None", variable has type "str")
main.py:11: error: Incompatible types in assignment (expression has type "None", variable has type "float")
我可以 # type: ignore,但是我在编辑器中丢失了类型提示和验证。我是否遗漏了一些明显的东西,或者我应该为 FastAPI 项目禁用 mypy?
您可以使用 Optional
:
from typing import Optional
class Item(BaseModel):
name: str
description: Optional[str] = None
price: float
tax: Optional[float] = None
这告诉 mypy
该值应该属于该类型,但 None
是可以接受的。
如果您使用的是 mypy,它可能会抱怨类型声明,例如:
tax: float = None
错误如下:
赋值中的类型不兼容(表达式的类型为 "None",变量的类型为 "float")
在这些情况下,您可以使用 Optional 告诉 mypy 该值可以是 None,例如:
tax: Optional[float] = None
在上面的代码中,
看看这个视频,在这个视频中已经解释过了
Base Model explained here
我目前正在学习 fastAPI 教程,我的环境设置有 black、flake8、bandit 和 mypy。本教程中的所有内容都运行良好,但我一直不得不 # type: ignore things 让 mypy 合作。
class Item(BaseModel):
name: str
description: str = None
price: float
tax: float = None
@app.post("/items/")
async def create_items(item: Item) -> Item:
return item
Mypy 然后错误:
❯ mypy main.py [14:34:08]
main.py:9: error: Incompatible types in assignment (expression has type "None", variable has type "str")
main.py:11: error: Incompatible types in assignment (expression has type "None", variable has type "float")
我可以 # type: ignore,但是我在编辑器中丢失了类型提示和验证。我是否遗漏了一些明显的东西,或者我应该为 FastAPI 项目禁用 mypy?
您可以使用 Optional
:
from typing import Optional
class Item(BaseModel):
name: str
description: Optional[str] = None
price: float
tax: Optional[float] = None
这告诉 mypy
该值应该属于该类型,但 None
是可以接受的。
如果您使用的是 mypy,它可能会抱怨类型声明,例如:
tax: float = None
错误如下: 赋值中的类型不兼容(表达式的类型为 "None",变量的类型为 "float") 在这些情况下,您可以使用 Optional 告诉 mypy 该值可以是 None,例如:
tax: Optional[float] = None
在上面的代码中, 看看这个视频,在这个视频中已经解释过了 Base Model explained here