Python代码扫描:静态类型检查的最佳选择mypy

目录

介绍

mypy特点

安装&配置

命令行参数

使用实践

参考文档


注意:后续技术分享,第一时间更新,以及更多更及时的技术资讯和学习技术资料将在公众号CTO Plus发布,请关注公众号:CTO Plus

静态类型检查是现代软件开发中的一项重要工具,它可以帮助我们在编写代码时发现潜在的类型错误,提高代码的可读性和可维护性。在众多的静态类型检查工具中,mypy是一种受欢迎且功能强大的选择。本文我将详细介绍mypy的特点、使用方法和实践经验。

本篇文章《Python代码扫描:静态类型检查的最佳选择mypy》属于【Python代码规范与扫描】系列内容的第七篇,前面六篇可以根据自己情况自行查阅,同时欢迎公众号CTO Plus后续的文章:

代码规范与静态扫描系列内容:

  1. 企业级Python代码静态扫描-代码规范、逻辑、语法、安全检查,以及代码自动编排介绍
  2. 通读Python PEP8代码规范
  3. Python代码扫描:新一代 Python Linter工具Ruff
  4. Python代码扫描:提升Python代码质量的神器-pylint详解与使用指南
  5. Python代码扫描:轻量级Python静态代码分析工具pyflakes
  6. Python代码扫描:Python代码规范与错误检查的利器-flake8详解与实践
  7. Python代码扫描:静态类型检查的最佳选择mypy
  8. Python代码扫描:自动化移除Python代码中的冗余-autoflake使用技巧与实例
  9. Python代码扫描:Python代码格式化的利器-yapf详解与最佳实践
  10. Python代码扫描:一键格式化Python代码的黑魔法-black使用教程
  11. Python代码扫描:导入语句自动排序工具-isort使用指南与示例
  12. Python代码扫描:自动化修复Python代码风格的工具-autopep8详解与实例
  13. Python代码扫描:项目中的代码规范与错误检查-pyproject-flake8配置与使用方法
  14. Python代码扫描:企业级代码代码安全漏洞扫描Bandit

介绍

mypy让动态语言 Python 拥有静态类型检查的能力,是一个代码静态类型检查器。能帮助我们更早地发现代码中的类型错误,从而减少不必要的调试和维护时间。

它通过使用Python的类型标注功能,能够确保变量类型始终如一,始终是定义的那样,不会因为中途的某次赋值,把一个列表变成了字符串。

mypy能正常识别出类似于字符串与数字相加这种错误,无论是直接hard code 写的还是字符串变量加上整型变量。在代码中声明了a_list是一个只包含数字的列表,当传入一个字符串的时候就会报错。这块就比pyflakes好点,有这块需求的可以选择mypy。

mypy特点

mypy是一个Python的静态类型检查工具,具有以下几个特点:

  1. 静态类型检查:mypy可以对Python3代码进行静态类型检查,即在编译时检查代码中的类型错误。它使用类型注解来指定变量和函数的类型,并在编译时检查类型的一致性。

  1. 功能强大,与类型系统集成:mypy与Python的类型系统紧密集成,mypy支持多种类型,包括基本类型(整数、浮点数、字符串、列表、字典)、容器类型、自定义类型等,并且可以支持函数重载、泛型等高级特性。关于Python的这些类型的介绍和使用,请关注公众号CTO Plus对Python的类型讲解的内容。

  1. 灵活可定制:mypy提供了丰富的配置选项,可以根据项目的需求进行定制。我们可以通过配置文件或命令行参数来设置规则和忽略列表,以适应不同的项目和团队。

  1. 可扩展性:mypy可以扩展自定义(插件)类型和检查规则,我们可以根据自己的需求定义自己的类型检查规则,使其适应更多的使用场景(比如不用的项目和团队需求)。

  1. 可移植性:mypy可以在多种平台上运行,包括Linux、macOS、Windows等。

  1. 可与其他工具集成:mypy可以与其他工具集成,如IDE编辑器、静态分析工具、持续集成系统和代码审查工具等,这样可以在开发过程中实时检查代码,并及时给出反馈,提升开发效率和代码质量。

  1. 同时,mypy支持Python 2和Python 3。

安装&配置

可以通过pip命令安装mypy,如下所示:pip install mypy

关于与IDE PyCharm的集成使用,可以参考前面的文章Ruff和pylint的使用,也简单,此处不做论述。

命令行参数

此处我总结下Mypy工具常用的一些命令行参数,其他的可以参考官方文档:

--strict:启用严格模式,会检查更多的类型错误。

--ignore-missing-imports:忽略缺少的导入。

--follow-imports=<mode>:设置导入模块的方式,可选值为"silent"、"skip"和"error"。

--disallow-untyped-defs:禁止未注释的函数和方法没有类型注解。

--disallow-untyped-calls:禁止未注释的函数和方法的调用没有类型注解。

使用实践

在实际使用mypy的过程中,可以根据以下经验来提高检查的效果:

1. 配置规则:根据项目的需求,可以通过配置文件或命令行参数来设置规则和忽略列表。可以参考mypy的官方文档和社区的经验,选择适合自己项目的规则。

2. 定期检查:建议定期对代码进行类型检查,以保持代码的质量和可维护性。可以在代码提交前或持续集成环境中执行检查,帮助开发者及时发现和修复类型错误。

3. 关注警告:除了类型错误,mypy还会输出警告信息。有时警告可能不是严重的问题,但也值得关注。可以根据项目的需求,决定是否修复警告。

4. 结合编辑器:建议在编辑器中集成mypy,以便在开发过程中实时检查代码。许多流行的编辑器,如VS Code和PyCharm,都提供了mypy的插件和集成功能。

添加类型注解:在Python代码中,使用类型注解来指定变量和函数的类型。例如,可以使用`int`来注解整数类型,使用`str`来注解字符串类型。关于类型注解的详细使用和介绍,请关注公众号CTO Plus后续的文章。

接下来是一个简单的使用示例

  1. 创建Python示例代码

首先,我们创建一个myfile.py 的Python文件,并使用类型注释描述变量和函数的类型信息。

def add_numbers(a, b):

return a + b

为该函数添加类型注释

def add_numbers(a: int, b: int) -> int:

return a + b

“a”和“b”的类型均为“int”,并且该函数将返回一个“int”的值。

  1. 检查类型错误

在终端中运行mypy命令来检查该文件中是否存在类型错误。例如:mypy myfile.py。

  1. 解决问题

如果mypy发现了类型错误,mypy将输出每个类型错误的位置、描述和类型信息。我们可以根据这些信息来定位和修复代码中的类型错误,来解决这些问题。

如果代码没有任何类型错误,则mypy将不会输出任何内容。

  1. 持续监测

在编辑器中配置mypy插件,以便在编写代码时持续检查类型错误。

  1. 集成到编译流程

将mypy集成到编译流程中,以确保代码可以顺利地通过类型检查。

执行检查:在命令行中执行以下命令,即可对指定的Python代码进行静态类型检查:

当然,我们也可以对整个目录下的工程进行检测,比如我们的工程目录为/path/to/code,执行下面的命令即可。

mypy /path/to/code

这将对指定路径下的所有Python文件进行类型检查,并输出类型错误和警告。

参考文档

  1. mypy 1.5.1 documentation
  2. Python代码规范:企业级代码静态扫描-代码规范、逻辑、语法、安全检查,以及代码规范自动编排(1)_pycharm 检查代码规范_SteveRocket的博客-CSDN博客
  3. https://blog.csdn.net/zhouruifu2015/article/details/129877179

Python专栏
https://blog.csdn.net/zhouruifu2015/category_5742543


更多资料 · 微信公众号搜索【CTO Plus】关注后,获取更多,我们一起学习交流。

关于公众号的描述访问如下链接


更多精彩,关注我公号,一起学习、成长

关于Articulate“做一个知识和技术的搬运工。做一个终身学习的爱好者。做一个有深度和广度的技术圈。”一直以来都想把专业领域的技icon-default.png?t=N7T8https://mp.weixin.qq.com/s?__biz=MzIyMzQ5MTY4OQ==&mid=2247484278&idx=1&sn=2b774f789b4c7a2ccf10e465a1b9def6&chksm=e81c2070df6ba966026fd7851efa824b5e2704e3fd34e76228ca4ce64d93f7964cd4abe60f2b#rd

标准库系列-推荐阅读:


推荐阅读:

猜你喜欢

转载自blog.csdn.net/zhouruifu2015/article/details/132832127