python - 在 python 字典中为 mypy 指定键
问题描述
假设我有一些代码
def get_x(d: dict) -> int:
d["x"]
但是,我想告诉 mypyd
应该只包含某些键(例如只有“x”键)。这样,如果我在尝试引用无效键的代码中犯了错误d
,mypy 将触发错误。
我的问题是:
- 这可能吗?mypy 可以验证字典键吗?
- 如果是,这是如何完成的?如果没有,是否有首选的解决方法?
解决方案
在尝试围绕 AWS API Gateway/Lambda 集成进行一些输入时也遇到了这个问题。
正如@Michael0x2a 在评论中指出的那样,TypedDict似乎是要走的路,特别是因为它在传递给函数之前不需要自己进行任何转换(API 响应的要求,就像你提到的那样)。
from mypy_extensions import TypedDict
DictWithOnlyX = TypedDict('DictWithOnlyX', {"x": str})
# error: Extra key 'y' for TypedDict "DictWithOnlyX@58"
dx1: DictWithOnlyX = { "y": 123 }
# error: Incompatible types (expression has type "int",
# TypedDict item "x" has type "str")
dx2: DictWithOnlyX = { "x": 123 }
# GOOD!
dx3: DictWithOnlyX = { "x": "123" }
还应该注意,如果依赖关系在生产和开发/测试之间分离,那么这会mypy
产生生产依赖。
推荐阅读
- google-cloud-firestore - 保存 Firestore 控制台过滤器设置
- javascript - React App 在同一服务器和多个域中
- python - 为什么 aiohttp 比 run_in_executor 包裹的请求慢?
- flutter - 我的颤振应用程序在启动时没有显示在 chrome 中,没有错误,当运行到我的 android 时,它给了我错误
- laravel - Laravel 帮助优化命令脚本
- django - 在上传 django 之前调整图像大小而不保存
- c++ - 正确实现类函数数组
- bash - 通过保留bash中的第一行来删除与特定模式匹配的所有行
- angular - 带有来自可观察对象的标头值的 httpinteceptor
- c# - 对话的 Outlook 收件箱对话视图的项目条件是什么?