使用mypy对python程序进行静态检查

作者:wx60cb0021898b2 时间:2022-06-17 18:10:55 

前言

在此之前,我认为 Python 的类型提示就是一个花瓶,看起来好看,但并没有实质的作用,因为即使类型写错了,或者传错了,程序仍然可以运行,直到我发现了 mypy 这个工具。今天就来聊一聊 mypy。

mypy 是 Python 中的静态类型检查器。写完带有类型提示的代码之后,先别运行行,用 mypy 命令来检查下你的代码,如果有错误,会提示你,这让 Python 的类型提示有了真正的作用。后续开发的过程中可以强制 mypy 检查无误后才能上线,借此提高代码的可读性和可维护性。

嗯,很实用,不是吗?下面分享一下如何使用 mypy。

1、安装

这个很简单了,pip install mypy 就搞定了。

2、执行

假如有这样一个 Python 程序,名称叫 demo1.py,内容如下:

def greeting(name: str) -> str: #这里提示有问题
   print (f'Hello { name }')

x: str = 'xxx'
y: int = "yyy" #这里应该提示有问题
greeting(x)
greeting(y) #这里应该提示有问题

代码我已经指出了两处错误,现在让 mypy 检查一下:

使用mypy对python程序进行静态检查

果然,mypy 发现了三处错误,并一一提示,非常好用啊。

如果不希望检查某一行,可以在注释上加上"# type: ignore":

y: int = "yyy" # type: ignore

mypy 具有强大且易于使用的类型系统,具有很多优秀的特性,例如类型推断、泛型、可调用类型、元组类型、联合类型和结构子类型。

3、常用的内置类型

使用mypy对python程序进行静态检查

4、配置文件

mypy 将依次查找当前目录下配置文件

mypy.ini

.mypy.ini

pyproject.toml

setup.cfg

如果还找不到,则依次寻找下面的配置文件:

$XDG_CONFIG_HOME/mypy/config

~/.config/mypy/config

~/.mypy.ini

此外,你也可以使用??--config-file?? 指定配置文件。

一个典型的 mypy.ini 配置文件如下:


# Global options:

[mypy]
python_version = 3.7
warn_return_any = True
warn_unused_configs = True

# Per-module options:

[mypy-mycode.foo.*]
disallow_untyped_defs = True

[mypy-mycode.bar]
warn_return_any = False

[mypy-somelibrary]
ignore_missing_imports = True

配置文件的详细说明,见官方文档:https://mypy.readthedocs.io/en/stable/

常见配置项:

files 逗号分隔的路径列表,如果命令行上没有给出,则应由 mypy 检查,支持递归。

exclude 应忽略检查的文件名、目录名和路径

ignore_missing_imports 禁止有关无法解析的导入的错误消息。

disallow_untyped_defs 不允许定义没有类型注释或类型注释不完整的函数。

plugins 逗号分隔的 mypy 插件列表

最后的话

mypy 是自动化测试中很重要的一部分,可以帮助我们检查 Python 语言的类型提示是否正确,减少代码的 bug,Python 开发的朋友们一定要用一用。

来源:https://blog.51cto.com/u_15273875/4712005

标签:Python,mypy,静态,检查
0
投稿

猜你喜欢

  • laravel中短信发送验证码的实现方法

    2023-11-15 08:05:16
  • Selenium元素定位的30种方式(史上最全)

    2023-11-13 17:03:41
  • 巧用Dreamweaver MX控制页面元素

    2009-09-13 18:38:00
  • 一文带你搞懂Python上下文管理器

    2022-11-26 05:15:50
  • keras自定义回调函数查看训练的loss和accuracy方式

    2021-01-11 18:13:09
  • asp的分词技术

    2007-08-25 17:50:00
  • PHP中定义数组常量(array常量)的方法

    2023-11-23 06:16:59
  • django1.11.1 models 数据库同步方法

    2024-01-19 11:12:47
  • asp实现树型结构

    2008-04-13 06:06:00
  • Python中if语句的基本格式实例代码

    2023-12-02 14:31:20
  • Python实现的matplotlib动画演示之细胞自动机

    2022-05-23 15:49:09
  • 利用Python批量导出mysql数据库表结构的操作实例

    2024-01-21 00:41:58
  • 移除Selenium中window.navigator.webdriver值

    2023-07-11 16:21:36
  • ie8下ewebeditor无效的解决办法

    2010-02-28 10:31:00
  • Numpy对数组的操作:创建、变形(升降维等)、计算、取值、复制、分割、合并

    2023-11-20 23:14:50
  • MySQL多表连接查询详解

    2024-01-27 13:07:57
  • TensorFlow2.0:张量的合并与分割实例

    2022-12-02 13:44:49
  • ASP+XML制作菜单管理

    2008-05-19 12:38:00
  • 关于sql和mysql对于别名不能调用的一些理解

    2024-01-26 16:34:15
  • python网络爬虫精解之Beautiful Soup的使用说明

    2021-02-21 15:20:48
  • asp之家 网络编程 m.aspxhome.com