使用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 发现了三处错误,并一一提示,非常好用啊。
如果不希望检查某一行,可以在注释上加上"# type: ignore":
y: int = "yyy" # type: ignore
mypy 具有强大且易于使用的类型系统,具有很多优秀的特性,例如类型推断、泛型、可调用类型、元组类型、联合类型和结构子类型。
3、常用的内置类型
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实现名片管理系统的具体代码,供大家参考,具体内容如下系统需求程序启动,显示名片管理系统欢迎界面,并显示功能菜
- 在 Python 中一切都可以看作为对象。每个对象都有各自的 id, type 和 value。id: 当一个对象被创建后,它的 id 就不
- JavaScript 中的并没有提供像 VBScript 里的 DateAdd 方法用于日
- http://serverName/appName/module/action/id/1/这个就是pathinfo模式在不考虑路由的情况下,
- 1.设置mysql允许外部连接访问(授权):grant all privileges on *.* to root@'%'
- sql server中如何判断表或者数据库的存在,但在实际使用中,需判断Status状态位:其中某些状态位可由用户使用 sp_dboptio
- 目录快速开始通过 pip 安装运行注入代码运行前几天在一个开源项目里遇到好多用户反馈,不会安装依赖,或者执行 pip install -r
- function GetRequest() { var
- Github 上很多大牛的代码都是Tensorflow v1 写的,比较新的文章则喜欢用Pytorch,这导致我们复现实验或者对比实验的时候
- 我一般都是通过xpath解析DOM树的时候会使用lxml的etree,可以很方便的从html源码中得到自己想要的内容。这里主要介绍一下我常用
- 第一章:日志管理 1.forcing log switchessql> alter system switch logfile;2.f
- 如下所示:from pymongo import MongoClient#建立和数据库系统的连接,指定host及port参数client =
- selenuim模块定位方法1,我们想要操作html页面上的元素,首先必须要定位到这个元素上。每个元素都有他各自的属性,比如id,name,
- 1.前言pyecharts 是一个用于生成 Echarts 图表的类库。Echarts 是百度开源的一个数据可视化 JS 库。用 Echar
- 首先我们应当了解什么是math库:math库是python提供的内置数学类函数库,math库不支持复数类型,仅支持整数和浮点数运算。math
- 前言:vue 中路由(router)的功能就是:把 url 与 应用中的对应的组件进行关联,通过不同的 url 访问不同的组件。但是如果我们
- 引言最近两年都是在使用 react 进行项目开发,看技术博客都是针对 react 和 javaScript 高级方面的,对 vue 的知识基
- 我就废话不多说了,还是直接看代码吧!from time import ctimeimport threadingimport timedef
- 1、Git的基本操作流程初始化一个本地版本库,每个版本库仅需要执行一次。将中央版本库内容克隆到本地版本库,每个客户机仅需要执行一次。添加指定
- 1、字符串的定义所谓字符串,就是由0个或者多个字符组成的有限序列。在Python程序中,如果我们把单个或多个字符用单引号''