mypy:为动态字典中的特定键定义类型
mypy: define types for specific keys in dynamic dictionary
我有以下字典代表一个可能是许多变体之一的人。这里只是一些:
person = {"name": "Johnny"}
person = {"name": "Johnny", "age": 25}
person = {"name": "Johnny", "age": 25, "active": True}
我正在提取某些键并使用它们打印语句。问题出现在类型提示中,当我在脚本上 运行 mypy:
时,我收到一条错误消息 Incompatible types in assignment (expression has type "object", variable has type "Optional[str]")
name: Optional[str] = person.get("name") # mypy error here
age: Optional[int] = person.get("age") # mypy error here
if name and age:
print(f"In 5 years, {name} will be {age + 5} years old")
要解决此问题,mypy_extensions.TypedDict
类型似乎很有希望,但似乎我不能缺少或多余的键:
from mypy_extensions import TypedDict
PersonDict = TypedDict("PersonDict", {"name": str, "age": int})
# ERROR: Key 'age' missing for TypedDict "PersonDict"
person: PersonDict = {"name": "Johnny"}
# ERROR: Extra key 'active' for TypedDict "PersonDict"
person: PersonDict = {"name": "Johnny", "age": 25, "active": True}
是否可以为字典中的特定键定义类型,即使该字典中的键是动态的?
将 total=False
添加到您的 TypedDict 将允许缺少键:
PersonDict = TypedDict("PersonDict", {"name": str, "age": int}, total=False)
https://mypy.readthedocs.io/en/latest/more_types.html#totality
似乎不可能允许架构中没有的其他键。
我有以下字典代表一个可能是许多变体之一的人。这里只是一些:
person = {"name": "Johnny"}
person = {"name": "Johnny", "age": 25}
person = {"name": "Johnny", "age": 25, "active": True}
我正在提取某些键并使用它们打印语句。问题出现在类型提示中,当我在脚本上 运行 mypy:
时,我收到一条错误消息Incompatible types in assignment (expression has type "object", variable has type "Optional[str]")
name: Optional[str] = person.get("name") # mypy error here
age: Optional[int] = person.get("age") # mypy error here
if name and age:
print(f"In 5 years, {name} will be {age + 5} years old")
要解决此问题,mypy_extensions.TypedDict
类型似乎很有希望,但似乎我不能缺少或多余的键:
from mypy_extensions import TypedDict
PersonDict = TypedDict("PersonDict", {"name": str, "age": int})
# ERROR: Key 'age' missing for TypedDict "PersonDict"
person: PersonDict = {"name": "Johnny"}
# ERROR: Extra key 'active' for TypedDict "PersonDict"
person: PersonDict = {"name": "Johnny", "age": 25, "active": True}
是否可以为字典中的特定键定义类型,即使该字典中的键是动态的?
将 total=False
添加到您的 TypedDict 将允许缺少键:
PersonDict = TypedDict("PersonDict", {"name": str, "age": int}, total=False)
https://mypy.readthedocs.io/en/latest/more_types.html#totality
似乎不可能允许架构中没有的其他键。