1

我目前正在学习 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?

4

2 回答 2

5

您可以使用Optional

from typing import Optional

class Item(BaseModel):
    name: str
    description: Optional[str] = None
    price: float
    tax: Optional[float] = None

mypy表明该值应该属于该类型,但None可以接受。

于 2019-05-21T19:57:22.807 回答
0

如果您使用的是 mypy,它可能会抱怨以下类型声明:

tax: float = None

出现如下错误:赋值中的类型不兼容(表达式的类型为“None”,变量的类型为“float”)在这些情况下,您可以使用 Optional 告诉 mypy 该值可能为 None,例如:

tax: Optional[float] = None

在上面的代码中,查看这个视频,它已经在这个 Base Model 中解释过

于 2019-10-22T14:14:57.467 回答