首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

为什么“mypy`”不能检测函数内的错误TypedDict使用情况

mypy是一个静态类型检查工具,用于检测Python代码中的类型错误。它可以帮助开发人员在编译时发现潜在的类型错误,提高代码的可靠性和可维护性。

TypedDict是Python 3.8引入的一种数据结构,用于定义具有固定键和特定类型值的字典。它允许开发人员在编写代码时指定字典的键和值的类型,并提供类型检查的功能。

然而,目前的mypy版本(截至2021年10月)对于函数内的TypedDict使用情况的类型检查支持有限。这是因为mypy目前主要关注于对函数签名和函数调用的类型检查,而不是函数内部的具体实现。

尽管mypy无法直接检测函数内的TypedDict使用情况,但可以通过其他方式来确保代码的正确性。以下是一些建议:

  1. 使用合适的注释:在函数内部,可以使用注释来说明TypedDict的使用情况,例如指定键和值的类型。这样可以提供更多的文档和提示,帮助其他开发人员理解代码的意图。
  2. 编写单元测试:编写针对函数内部的TypedDict使用情况的单元测试,以确保代码在运行时按照预期工作。通过编写全面的测试用例,可以捕获潜在的错误和边界情况。
  3. 代码审查:通过代码审查的方式,让其他开发人员仔细检查函数内的TypedDict使用情况。他们可以提供反馈和建议,帮助改进代码的质量和可读性。

总结起来,尽管mypy目前对函数内的TypedDict使用情况的类型检查支持有限,但可以通过注释、单元测试和代码审查等方式来确保代码的正确性和可靠性。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

如何更好使用 Python 类型提示?

mypy 检查类型提示 假如有这样一段代码: # script.py x: int = 2 # ... x = 3.5 用 Python 解释器执行是不会有任何错误: 借助于 mypy 就可以,...先 pip install mypy 安装一下,然后 mypy script.py 即可: 更多 mypy 相关可以参考前文mypy 这个工具,让Python类型提示变得非常实用。...3、类型提示好处 如果解释器没有强制执行类型提示,为什么还要编写类型提示呢?确实,类型提示不会改变代码运行方式:Python 本质上是动态类型,这一点不太可能会改变。...IDE 可以依靠类型检测来静态分析你代码并帮助检测潜在错误(例如,传递错误类型参数、调用错误方法等)。另外,还可以根据类型提示为每个变量提供自动补全。...,并防止在顶部执行静态代码分析 (mypy) 时出现隐蔽和错误

1.5K10

使用 Mypy 检查 30 万行 Python 代码,总结出 3 大痛点与 6 个技巧!

(英:self-documenting)捕获错误:是真的!Mypy 确实能找出 bug。从始至终。自信地重构:这是 Mypy 最有影响力一个好处。...虽然类型注解语法基础很简单,但我们经常听到这样问题:“为什么 Mypy 会这样?”、“为什么 Mypy 在这里报错?”等等。...例如,你不能解构一个TypedDict ——它必须用字面量 key 构造——所以下方第二种写法是行不通:from typing import TypedDictclass Point(TypedDict...(装饰器另一个问题是我前面提过@functools.lru_cache :由于装饰器最终定义了一个全新函数,所以如果你不正确地注解代码,就可能会出现严重而令人惊讶错误。)...为了确保它完好,不被意外Any毒害,我们在一组文件上写了调用 Mypy 单元测试,并断言 Mypy 抛出错误能匹配一系列预期内异常:def test_check_function(self) -

91620
  • 流畅 Python 第二版(GPT 重译)(八)

    示例 15-6 构建了一个有效 BookDict,并尝试对其进行一些操作。这展示了 TypedDict 如何使 Mypy 能够捕获错误,如 示例 15-7 中所示。...reveal_type 不是运行时 Python 函数,而是 Mypy 提供调试工具。这就是为什么没有为它导入原因。在 示例 15-7 中查看其输出。 ⑥ demo 函数最后三行是非法。...¹¹ 使用 Any 是具有传染性:由于 Any 与所有类型一致,滥用它可能通过类型推断产生级联效应,削弱类型检查器在代码其他部分检测错误能力。...最常见例子涉及生成类型非全局上下文(例如,内部类、函数类等)。...② 在调用.load('ABC')时,Mypy 解释了为什么str不行:str.

    21710

    爬虫(108)Python 3.8超酷新功能(接近一万字,请耐心享用,而且建议收藏)

    一种使用情况Literal是,当使用字符串参数描述特定行为时,能够精确地添加类型。...r}") draw_line("up") 通过将允许值暴露direction给类型检查器,现在可以警告该错误: $ mypy draw_line.py draw_line.py:15: error...如果您仔细查看上面Mypy输出,您会发现它在Union内部将较简单表示法转换为表示法。 在某些情况下,函数返回值类型取决于输入参数。...Mypy将使用错误消息标记此示例Cannot inherit from final class "Base"。要了解有关Final和更多信息@final,请参阅PEP 591。...您也可以TypedDict纯粹用作注释: py38: PythonVersion = {"version": "3.8", "release_year": 2019} Mypy会告知您任何值类型错误

    2.6K20

    Python 开发者 6 个必备库

    BitBucket 上有源代码和错误跟踪记录:https://bitbucket.org/pypy/pypy Python 必备之 CFFI CFFI 主要用于何处?...C 外部函数接口库(CFFI)(https://cffi.readthedocs.io/)为 Python 应用程序与独立 C 库交互提供了一种机制。...现在可以在即将发布 Python 3.7 上使用betas了,在 Windows 上更好地支持外部错误处理,并支持 C 语言中更多现代标准类型,例如 float/double _Complex 和...Mypy 0.530 功能 Mypy 0.530 (http://mypy-lang.blogspot.com/2017/10/mypy-0530-released.html)添加了不同协议(http...它还在仅用于包含特定类型对象字典中添加 “TypedDict” 类型,并且可以逐个对文件进行更严格类型检查选项。 哪里可以下载 Mypy 0.530 ?

    2.1K70

    Python开发者必备6个基本库

    请注意,对于Python 2.7和Python 3.5兼容性,存在不同二进制文件,因此需确保正在获取与将要运行脚本匹配版本。 BitBucket上提供源代码和错误跟踪。...The C Foreign Function Interface library简写,可称做:C外部函数接口库(CFFI),为Python应用程序与独立C库互操作提供了一种方式。...现在可以使用betas来实现即将到来Python 3.7,更好地支持Windows上外部错误处理,并支持C中更多现代标准类型,例如float / double _Complex和char16_t和...Mypy 0.530特点 Mypy 0.530增加了对协议支持,协议是用于Python子类的当前实验类型功能。...它还为仅用于包含特定类型对象目录添加“TypedDict”类型,并且可以逐个对文件进行更严格类型检查。

    1.5K10

    Python | 开发者必备 6 个库

    BitBucket 上有源代码和错误跟踪记录:https://bitbucket.org/pypy/pypy Python 必备之 CFFI CFFI 主要用于何处?...C 外部函数接口库(CFFI)(https://cffi.readthedocs.io/)为 Python 应用程序与独立 C 库交互提供了一种机制。...现在可以在即将发布 Python 3.7 上使用betas了,在 Windows 上更好地支持外部错误处理,并支持 C 语言中更多现代标准类型,例如 float/double _Complex 和...Mypy 0.530 功能 Mypy 0.530 (http://mypy-lang.blogspot.com/2017/10/mypy-0530-released.html)添加了不同协议(http...它还在仅用于包含特定类型对象字典中添加 “TypedDict” 类型,并且可以逐个对文件进行更严格类型检查选项。 哪里可以下载 Mypy 0.530 ?

    2.1K30

    Python | 开发者必备 6 个库

    BitBucket 上有源代码和错误跟踪记录:https://bitbucket.org/pypy/pypy Python 必备之 CFFI CFFI 主要用于何处?...C 外部函数接口库(CFFI)(https://cffi.readthedocs.io/)为 Python 应用程序与独立 C 库交互提供了一种机制。...现在可以在即将发布 Python 3.7 上使用betas了,在 Windows 上更好地支持外部错误处理,并支持 C 语言中更多现代标准类型,例如 float/double _Complex 和...Mypy 0.530 功能 Mypy 0.530 (http://mypy-lang.blogspot.com/2017/10/mypy-0530-released.html)添加了不同协议(http...它还在仅用于包含特定类型对象字典中添加 “TypedDict” 类型,并且可以逐个对文件进行更严格类型检查选项。 哪里可以下载 Mypy 0.530 ?

    1.7K30

    Python 开发者 6 个必备库

    请注意,为了兼容 Python 2.7 和 Python 3.5 ,存在不同二进制文件,因此请确保你正在获取与你将要运行脚本所匹配版本。 BitBucket 上有源代码和错误跟踪记录。...C 外部函数接口库(CFFI)为 Python 应用程序与独立 C 库交互提供了一种机制。...现在可以在即将发布 Python 3.7 上使用betas了,在 Windows 上更好地支持外部错误处理,并支持 C 语言中更多现代标准类型,例如 float/double _Complex 和...Mypy 0.530 功能Mypy 0.530 添加了不同协议支持,该协议是用于 Python 子类目前实验性类型功能。...它还在仅用于包含特定类型对象字典中添加 “TypedDict” 类型,并且可以逐个对文件进行更严格类型检查选项。 来源:36大数据 END 投稿和反馈请发邮件至hzzy@hzbook.com。

    84220

    Python 开发者 6 个必备库

    BitBucket 上有源代码和错误跟踪记录:https://bitbucket.org/pypy/pypy Python 必备之 CFFI CFFI 主要用于何处?...C 外部函数接口库(CFFI)(https://cffi.readthedocs.io/)为 Python 应用程序与独立 C 库交互提供了一种机制。...现在可以在即将发布 Python 3.7 上使用betas了,在 Windows 上更好地支持外部错误处理,并支持 C 语言中更多现代标准类型,例如 float/double _Complex 和...Mypy 0.530 功能 Mypy 0.530 (http://mypy-lang.blogspot.com/2017/10/mypy-0530-released.html)添加了不同协议(http...它还在仅用于包含特定类型对象字典中添加 “TypedDict” 类型,并且可以逐个对文件进行更严格类型检查选项。 哪里可以下载 Mypy 0.530 ?

    1.1K70

    Python开发必备6个库,有了它事半功倍!

    请注意,为了兼容 Python 2.7 和 Python 3.5 ,存在不同二进制文件,因此请确保你正在获取与你将要运行脚本所匹配版本。 BitBucket 上有源代码和错误跟踪记录。...C 外部函数接口库(CFFI)为 Python 应用程序与独立 C 库交互提供了一种机制。...06 Python 必备之 Mypy Mypy 主要用于何处?Python 动态性既是一种福音,也是一种烦恼,对于快速构建软件非常棒,但是当代码难以推理、测试和调试时,并不是很棒。...Mypy 0.530 功能Mypy 0.530 添加了不同协议支持,该协议是用于 Python 子类目前实验性类型功能。...它还在仅用于包含特定类型对象字典中添加 “TypedDict” 类型,并且可以逐个对文件进行更严格类型检查选项。

    1.8K80

    流畅 Python 第二版(GPT 重译)(四)

    AttributeError: 'Bird' object has no attribute 'quack' ① Mypy 无法检测到这个错误,因为alert中没有类型提示。...名义类型在运行前检测错误,但有时可能会拒绝实际运行代码,比如在示例 8-5 中调用alert_bird(daffy)。...这就是为什么拥有数百万行 Python 代码公司——如 Dropbox、Google 和 Facebook——投资于团队和工具,支持公司范围采用类型提示,并在 CI 管道中检查其 Python 代码库重要部分...④ reveal_type() 不能在运行时调用,因为它不是常规函数,而是 Mypy 调试工具—这就是为什么没有为它导入任何内容。...④ Mypy 标记了这个测试故意触发错误:Iterable series元素类型不能是object(必须是SupportsLessThan类型)。

    38310

    SqlAlchemy 2.0 中文文档(三十一)

    将 __init__() 方法应用于尚未包含显式构造函数映射类,该构造函数接受检测所有映射属性特定类型关键字参数。...对于所有无法检测类型情况,它将发出信息丰富错误消息,并且在所有情况下,可以明确提供适当类型,要么使用Mapped类,要么选择在内联声明中省略它。...将 __init__() 方法应用于尚未包含显式构造函数映射类,该构造函数接受特定类型关键字参数,用于检测所有映射属性。...对于所有这些无法检测到类型情况,它都将发出一个信息丰富错误消息,在所有情况下,可以明确提供适当类型,要么使用Mapped类,要么选择在内联声明中省略它。...映射关系 该插件对使用类型推断来检测关系类型有限支持。对于所有无法检测类型情况,它将发出信息丰富错误消息,并且在所有情况下,可以明确提供适当类型,可以使用Mapped类或选择性地省略内联声明。

    30020

    用例子看看,Python 3.12 到底更新了啥?

    比如在3.11中解释器不能告诉用户SyntaxError错误产生位置。...# 与类型注解相关新功能 PEP 692 用`TypedDict`注解**kwargs类型 PEP 484 介绍了如何注解函数签名中**kwargs类型,但是所有的**kwargs类型都一样。...这份提案提供了一种更精确类型注解方案,比如 from typing import TypedDict, Unpack class Movie(TypedDict): name: str year...参数类型声明作用于声明范围,对其外部是不生效。举个例子,函数参数类型注解可以作用于其派生类方法或该类其他地方。然而,它不能作用于模块范围其他地方,即使这个地方位于该类定义后面。...为了支持这种范围类型注解,现在虚拟机引入了一种新范围——注解范围(annotation scope)。在大多数情况下,这个范围等同于函数范围,但是它会和不同范围发生关联。

    60020

    怎么才能写出好看Python代码?这五个工具你得用上

    1、简单聊聊 首先得给大家说说我为什么直接从第十三章开始读,简单说就是我对这一章更感兴趣,当然本书其他章节也是非常优秀,后面我也会抽时间阅读学习。...pip install flake8、isort、black、pre-commit mypy 2.1 flake8 flake8 集合了PyFlakes、pycodestyle、McCabe,它们功能依次是检测代码语法错误和变量名未定义或者使用等...、代码格式是否符合PEP8规范、代码中函数圈复杂度。...McCabe检测圈复杂度你可能不知道表示什么,简单说就是代码难不难理解(它是根据函数控制流程图来计算,具体介绍大家感兴趣可以浏览器查查)。...mypy是一个静态类型检查工具,会根据代码中类型注解对代码进行类型检查并查找常见错误

    51010

    让你 Python 静态起来

    为什么要 “静态”? Typing Annotation 类型注释?...Django model Protocol 自定义类型 普通用法类 型自定义时 辅助函数 typing-extensions 实例:简化枚举类型 工程技巧 避免循环引用 mypy 再让我们看看那个例子...结语 为什么要 “静态”?...所以,如果 Python 能够 “静态” 一些,将会给我们带来几个明显增益: 大幅度提升代码可读性 能够将参数传递时 类型错误 扼杀在摇(biān)篮(mǎ)中 能够最大程度利用 IDE 提供代码提示...mypy mypy 原来是一个兼容大部分 Python 语法静态类型 Python 发行版,后来在官方受到启发,并加入类型注解之后,mypy 已经演化成了一个静态类型检查器,我们可以通过 pip 来安装

    95560
    领券