社区所有版块导航
Python
python开源   Django   Python   DjangoApp   pycharm  
DATA
docker   Elasticsearch  
aigc
aigc   chatgpt  
WEB开发
linux   MongoDB   Redis   DATABASE   NGINX   其他Web框架   web工具   zookeeper   tornado   NoSql   Bootstrap   js   peewee   Git   bottle   IE   MQ   Jquery  
机器学习
机器学习算法  
Python88.com
反馈   公告   社区推广  
产品
短视频  
印度
印度  
Py学习  »  Python

11.5K Star!有了这个 Python 开发利器,Bug 会减少很多

算法爱好者 • 2 年前 • 290 次点击  

【导语】:Python 静态类型检查库,可以发现程序中潜在的错误。

简介

Mypy 是 Python 的静态类型检查库,可以向 Python 程序添加类型注解,并用 mypy 对它们进行静态类型检查,无需运行代码即可发现程序中潜在的错误。还可以加入到 git hook 中,实现在提交代码前自动检查。Mypy 具有强大且易于使用的类型系统,具有现代功能,如类型推断、泛型、可调用类型、元组类型、联合类型和结构子类型。

使用 Python 3 注解语法(PEP 484 和 PEP 526)或 Python 2 基于注释的注解,能够有效的注释代码并使用 mypy 检查代码中的常见错误。

可以在程序中混合使用动态类型和静态类型,对于遗留代码,如果不方便使用静态类型,可以随时回退到动态类型。如:

from typing import Iterator

def fib(n: int) -> Iterator[int]:
    a, b = 0, 1
    while a         yield a
        a, b = b, a + b

对于 Python 2.7,标准注解写成注释:

def is_palindrome(s):
    # type: (str) -> bool
    return s == s[::-1]

项目地址:

https://github.com/python/mypy

快速开始

使用 pip 进行安装:

$ python3 -m pip install -U mypy

如果要运行最新版本的代码,可以从 git 进行安装:

$ python3 -m pip install -U git+git://github.com/python/mypy.git

安装完成后,可以使用以下命令对应用程序的静态类型进行类型检查:

$ mypy PROGRAM

运行测试的基本方法:

$ pip3 install -r test-requirements.txt
$ python2 -m pip install -U typing
$ ./runtests.py

IDE 集成

  • Vim
  1. 使用 Syntastic:在 ~/.vimrc 添加 let g:syntastic_python_checkers=['mypy']
  2. 使用 ALE:在 ~/vim/ftplugin/python.vim 中添加配置明确启用,let b:ale_linters = ['mypy']
  • Emas,使用Flycheck和Flycheck-mypy
  • Sublime Text,使用 SublimeLinter-contrib-mypy
  • Autom,使用 linter-mypy
  • PyCharm,使用 mypy 插件
  • VS Code,已提供对 mypy 的集成
  • 可以加入到 git hook 中,实现在提交代码前自动检查

常用命令

对指定内容进行检查

$ mypy foo.py bar.py some_directory

该命令是递归检查的,会检查目录下对应的所有指定文件。Mypy 还允许以其他方式检查指定代码:

-m MODULE, --module MODULE: 对提供的模块进行类型检查,不会递归地检查
-p PACKAGE, --package PACKAGE: 对提供的包进行类型检查,会递归检查
-c PROGRAM_TEXT, --command PROGRAM_TEXT:将提供的字符串作为程序进行检查
--exclude:递归发现要检查的文件时忽略指定的文件名、目录名和路径

配置文件

--config-file CONFIG_FILE:从给定文件读取配置。覆盖 mypy 的内置默认值

无类型定义和调用

--disallow-untyped-calls:有类型注解的函数调用没有注解定义的函数时报告错误
--disallow-untyped-defs,没有类型注解的函数定义时报告错误
--disallow-incomplete-defs,遇到部分注解不完整的函数定义时报告错误
--disallow-untyped-decorators,带有类型注解的函数用没有注解的装饰器装饰时报告错误

配置错误信息

--show-error-context:在所有错误之前带有解释错误上下文的消息
--show-column-numbers:显示行号
--show-error-codes:显示错误码
--pretty:格式化错误消息,自动换行、显示源代码片段和显示错误位置标记等
--show-absolute-path:显示文件的绝对路径

错误信息生成

--any-exprs-report DIR:在指定目录中生成一个文本文件报告
--cobertura-xml-report DIR:在指定目录中生成 Cobertura XML 类型检查报告,必须安装 lxml 库才能生成此报告
--html-report / --xslt-html-report DIR:在指定目录中生成 HTML 类型检查报告,必须安装 lxml 库才能生成此报告
--lineprecision-report DIR:在指定目录中生成一个纯文本文件报告,其中包含每个模块的类型检查行数等统计信息



- EOF -

推荐阅读  点击标题可跳转

1、从此明白了卷积神经网络(CNN)

2、这才是中国被卡脖子最严重的软件!

3、QUIC 是如何解决TCP 性能瓶颈的?


觉得本文有帮助?请分享给更多人

推荐关注「算法爱好者」,修炼编程内功

点赞和在看就是最大的支持❤️

Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/122687
 
290 次点击