我目前正在处理fastAPI教程,并且我的环境已设置为black,flake8,bandit和mypy。教程中的所有内容都可以正常工作,但我仍然必须输入#:忽略某些内容以使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")
我可以#类型:忽略,但是随后我在编辑器中丢失了类型提示和验证。我是否遗漏了明显的东西,还是应该只为MyFastAPI项目禁用mypy?
答案 0 :(得分:1)
您可以使用Optional
:
from typing import Optional
class Item(BaseModel):
name: str
description: Optional[str] = None
price: float
tax: Optional[float] = None
这表明mypy
的值应该是该类型,但是None
是可以接受的。
答案 1 :(得分:0)
如果您使用的是mypy,它可能会发出类似类型声明的抱怨:
tax: float = None
出现类似以下错误: 分配中的类型不兼容(表达式的类型为“ None”,变量的类型为“ float”) 在这种情况下,您可以使用Optional来告诉mypy该值可以为None,例如:
tax: Optional[float] = None
在上面的代码中, 观看此视频,此视频已在其中进行了解释 Base Model explained here