Python 静态分析Pylint、Pyflakes 与 Mypy ——我应该用谁?

【mypy+pybind11】静态检查与代码提示补全神器 目录 介绍 安装 使用 Pybind11与Mypy结合 介绍 众所周知,Python是一门动态类型语言,在运行期间才去做数据类型检查的语言,有以下优点 1. 开发迅速。 利用传统的静态语言要开发几周的功能和特性,使用动态语言也许几天甚至几个小时就可以实现。 2. 代码量少。静态函数式语言的表达能力也很强 3. 测试便捷。 很容易实现反射等动态特性 4. 内置丰富的原生数据结构。 提供了大量操作(如数组分片,字典更新等) 5. 简单易学。 动态语言的语法相对简单,helloworld 阅读详情

说到 Python 的静态分析工具,就不得不说Pylint、Pyflakes 和 Mypy。他们的作用有重叠的地方,但又有各自的侧重点。在某些时候你可以只选择其中一个来用,有时候你又需要把他们结合起来使用。

Pylint:让你的代码符合 PEP-8风格

PEP-8[1]是 Python 的官方编码风格指导。我们平时常常说到的:

  1. 函数名、变量名使用小写字母和下划线,类名使用驼峰命名法

  2. 缩进使用4个空格

  3. 运算符、赋值符号左右侧都要有空格,冒号右侧有空格左侧没有空格

  4. 多行字符串用三对单引号,但是 docstring 用三对双引号

  5. ……

这些都是PEP-8中明确建议的编码风格。

Pylint 主要的功能就是用于编码风格的检验,在默认情况下 Pylint 会以 PEP-8为标准,如果你写的代码不符合 PEP-8编码规范,它就会给你报错。

如下图所示:

通过修改 pylint 的配置文件,可以修改它检查的方式,从而使它遵守其他的编码规范,例如你们团队大部分人是从 Java 转到 Python 的,那么可以强行让变量名函数名都变成驼峰命名法。

使用 Pylint 方便团队形成统一的编码规范。

Pyflakes: 代码逻辑和语法检查

如果你使用的 Vim 或者记事本来写代码,那么可以用 Pyflakes 来检查代码是不是有语法错误或者逻辑错误。

Pyflakes 不会检查代码的风格,所以上面被 Pylint 报了一大堆错的文件,用 Pyflakes 来检查,它只会报三个错:

也就是变量定义了但是没有使用。

但如果有语法错误,那么 Pyflakes 就能成功发现:

需要注意的是,由于 Pyflakes 是静态分析的工具,所以对于像'1' + 1这种异常是无法检查出来的。

Mypy:静态类型检查器

Mypy 让动态语言 Python 拥有静态类型检查的能力。通过使用 Python 的类型标注功能,Mypy 能够确保你的变量类型始终如一,始终是你定义的那样,不会因为中途的某次赋值,把一个列表变成了字符串。

运行效果如下图所示:

Mypy 能正常识别出类似于字符串与数字相加这种错误,无论是直接 hard code 写的还是字符串变量加上整型变量。

在代码中声明了a_list是一个只包含数字的列表,当你传入一个字符串的时候就会报错。

关于 Python 的类型标注,可以阅读官方文档:Syntax for Variable Annotations[2]。

总结

如果只要统一团队的代码风格,那么可以使用 Pylint。Pylint 速度比较慢。

如果要检查代码中的语法错误,可以使用 Pyflakes。另有一个项目叫做 Flake8,它相当于 Pyflakes + Pylint 的合体。

如果要对代码做静态类型检查,那么使用 Mypy。

近期热门:

十行代码,用Python做一个迷你版的美图秀秀

实战:Flask + Vue 生成漂亮的词云

Python和Go都很火,我要怎么选?

情人眼里出西施,我用Python帮你搞定了!

高手心得|菜鸟学Python从入门到进阶

漫画,假装自己是Python高手,学会这十招就可以

看了范伟和葛大爷的电影,我决定用Python做个石头剪刀布

 点击阅读原文,阅读菜鸟学Python 400篇干货!

Python静态分析实战:Flake8、Pylint、Mypy工具链配置与CI/CD集成指南 代码静态分析是一种在不运行程序的情况下,通过分析源代码的语法、结构、数据流和控制流来发现潜在问题的技术。其核心原理是对代码进行抽象解析和模式匹配,旨在提前识别错误、安全漏洞和代码异味。这项技术的价值在于显著提升代码质量、增强可维护性,并能在团队协作中统一编码规范。在Python开发中,静态分析尤为重要,它能有效弥补动态类型语言在运行时才暴露类型错误的缺陷。典型的应用场景包括个人开发中的错误预防、团队项目的代码规范统一,以及DevOps流程中的自动化质量门禁。本文将聚焦于构建高效的Python静态分析流水线, 阅读详情

相关推荐

Python代码质量进阶:静态分析、格式化与类型检查工具链实践

在软件开发中,代码质量是保障项目可维护性和团队协作效率的核心要素。其原理在于通过自动化工具对源代码进行静态分析、风格检查和类型验证,从而在运行前发现潜在问题。这一技术价值在于显著提升代码的健壮性、可读性,并降低长期维护成本。应用场景广泛覆盖个人开发、团队协作以及持续集成流程。具体到Python生态,社区形成了以PEP 8为纲领的代码风格规范,并衍生出强大的自动化工具链。例如,静态分析工具如pylint和flake8能深入检查代码逻辑与风格;自动化格式化工具black则能统一代码格式,终结风格争论;而结合类型

weixin_30279315的博客 373

mypy 这个工具,让Python的类型提示变得非常实用

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

somenzz的博客 6695

Modelica建模,Modelica语言的学习,技术调研工作

Modelica是由Modelica协会维护、免费开放的物理系统面向对象的统一建模语言规范,为机、电、液、控等多领域复杂工程系统提供了统一的物理建模语言规范。 Modelica作为多学科统一建模仿真的国际标准,被仿真界广泛采用,系统多领域统一建模仿真,已成为世界公认的MBSE和CPS的核心关键支持技术。 Modelica 语法、函数、包、连接器、组件、子系统

xzb5566的专栏 4638

Mypy,一个神奇的 Python 库!

Mypy 是一个基于类型注解的静态类型检查器,它通过在代码中添加类型注解,使得开发者能够在编写代码时就能发现潜在的类型错误,提高代码质量和可读性。除了基础类型,可以定义自己的复杂类型,提高代码的可读性和可维护性。")Mypy 允许编写自定义检查器,以满足项目特定的需求。# 在这里编写自定义的类检查逻辑passPython Mypy 库作为一款强大的静态类型检查工具,通过详实而全面的示例代码,提供了深度解析的机会。

涛哥聊Python 2264

验证码接收平台搭建教程(含源代码)

在很多注册流程中,我们常常需要通过短信验证码验证用户的身份。本教程将手把手教你搭建一个验证码接收平台,用于自动接收并展示来自短信网关或短信转发器的验证码。⚠️ 本教程仅供学习使用,请勿用于任何非法用途!本教程展示了一个简单的验证码接收平台的搭建流程,从后端到前端完整实现。你可以将其用于学习 Web 开发、数据库操作以及 Flask 项目部署。访问我的优快云主页。

weixin_52548902的博客 4085

Bioinformatics2021 | FraGAT+:基于分子原始片段的多尺度图注意力机制的分子性质预测模型

Bioinformatics2021 | FraGAT:基于分子原始片段的多尺度图注意力机制的分子性质预测模型

justBeHerHero 2002

Python 常用的静态类型检查器:mypy

mypy是一个流行的Python 静态类型检查器,它可以帮助你发现代码中的类型错误,而无需实际运行代码。mypy通过分析你的 Python 代码中的类型提示(type hints)来工作,这些类型提示可以是显式声明的(使用类型注解),也可以是隐式推断的。

qiy_icbc的博客 2430

我用 Claude Code 给 Spring Boot 老项目做了一次代码 Review:查出 4 类隐藏问题

接手 Spring Boot 老项目时,真正麻烦的往往不是编译报错,而是分散在业务代码中的空指针、N+1 查询、异常吞没和并发隐患。本文记录一次使用 Claude Code 辅助代码 Review 的完整流程,并给出提示词、Java 示例、修改方案和人工复核方法。

海波的专栏 400

Spring 使用 Mypy 检查 30 万行代码,总结出三大痛点与六个技巧

在 Spring ,我们维护了一个大型的 Python 单体代码库(英:monorepo),用上了 Mypy 最严格的配置项,实现了 Mypy 全覆盖。简而言之,这意味着每个函数签名都是带注解的,并且不允许有隐式的​​Any​​ 转换。(译注:此处的 Spring 并不是 Java 中那个著名的 Spring 框架,而是一家生物科技公司,专注于找到与年龄相关的疾病的疗法,2022 年 3 月曾获得比尔&梅琳达·盖茨基金会 120 万美元的资助。)

AS011x的博客 600

Raptor码(一):2007RFC5053标准编解码学习

RFC 5053 标准

a_beatiful_knife的博客 3493

基于分数阶傅里叶变换的chirp信号检测与参数估计(原理附代码)

线性调频信号(chirp信号) 顾名思义,该信号的频率随着时间线性变换,其复数表达形式如下: s(t)=e2jπ(f0t+0.5μt2)s(t)=e^{2j\pi(f_0 t+ 0.5\mu t^2)}s(t)=e2jπ(f0​t+0.5μt2) 根据欧拉公式,其相位项为2π(f0t+0.5μt2))2\pi(f_0 t+ 0.5\mu t^2))2π(f0​t+0.5μt2))。信号的角频率是相位对时间的导数。对相位求导后有2π(f0+μt)2\pi(f_0+\mu t)2π(f0​+μt),显然,f0f

weixin_42845306的博客 1万+

python 静态分析_Python 静态分析Pylint、Pyflakes 与 Mypy ——我应该用谁?

Python 静态分析Pylint、Pyflakes 与 Mypy ——我应该用谁?摄影:产品经理黄金炒饭配麻婆豆腐说到 Python 的静态分析工具,就不得不说Pylint、Pyflakes 和 Mypy。他们的作用有重叠的地方,但又有各自的侧重点。在某些时候你可以只选择其中一个来用,有时候你又需要把他们结合起来使用。Pylint:让你的代码符合 PEP-8风格PEP-8[1]是 Python ...

weixin_28818559的博客 346

浪涌电流测试仪的工作原理

浪涌电流脉冲形成的开始由同步电路 13 确定,该同步电路 13 发送命令以打开和第二开关 10 和 11,向发生器 14 发送控制命令以生成被测半导体器件 5 的控制信号和参考信号整形器 9 的触发脉冲。电流源的功率输出并联连接,以对流经被测半导体样品的电流求和。此外,使用数字控制扩展了测试仪的功能,能够产生各种形状的电流脉冲,例如梯形电流脉冲,以估计被测晶闸管的导通状态扩展时间。由于晶体管3的栅极是连接的,并且平衡电阻4包含在晶体管3的源中,因此通过每个晶体管3的电流脉冲大致相同,并重复参考信号的形状。

Jesse0257的博客 1259

python mypy类型检查_Python 静态分析Pylint、Pyflakes 与 Mypy ——我应该用谁?

原标题:Python 静态分析Pylint、Pyflakes 与 Mypy ——我应该用谁?说到 Python 的静态分析工具,就不得不说Pylint、Pyflakes 和 Mypy。他们的作用有重叠的地方,但又有各自的侧重点。在某些时候你可以只选择其中一个来用,有时候你又需要把他们结合起来使用。Pylint:让你的代码符合 PEP-8风格PEP-8[1] 是 Python 的官方编码风格指导。我...

weixin_36047753的博客 356

【QT+PCL】串口读取单线激光雷达数据并在QVtkWidget组件中实时刷新(一)

(本文主要记录开发过程以及遇到的困难及解决方式)

2301_76329543的博客 3068

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

揭秘Python代码隐患:如何用静态分析工具提前发现80%的Bug

掌握Python静态分析工具,提前发现代码缺陷。本文介绍如何通过主流工具在开发阶段识别80%常见Bug,涵盖语法检查、类型验证与安全漏洞检测,提升代码质量与维护效率,值得收藏。

CodePulse的博客 471

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

【程序员必看】Python+AI代码审查工具选型:这7款工具你不可不知

提升代码质量效率必备,本文盘点PythonAI代码审查工具的7款优选方案,覆盖自动化检测、智能修复与团队协作场景,结合静态分析与AI建议,助力开发者精准发现潜在缺陷。实用对比值得收藏。

PoliVein的博客 1062

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

Python静态分析实战:从Flake8到MyPy,提升代码质量与安全

静态分析是一种在代码运行前,通过分析其语法、结构和数据流来发现潜在问题的技术。其核心原理是构建代码的抽象模型,检查代码规范、逻辑一致性和安全漏洞。这项技术的价值在于能显著提升代码质量、增强可维护性,并预防运行时错误。在工程实践中,静态分析广泛应用于代码审查自动化、编码规范落地、安全漏洞扫描等场景。本文聚焦Python生态,深入探讨如何利用Flake8、Pylint等工具进行代码风格检查,并结合MyPy实现类型安全。通过集成到开发工作流和CI/CD流程,静态分析能有效管理从‘人狗大作战’这类兴趣项目到企业级应

weixin_30644369的博客 368

5分钟跑通 RapidOCR:多语言 OCR 从装依赖到出识别结果的最短路径

手边一堆扫描页,想提取文字又嫌云端 API 又贵又慢?RapidOCR 就是干这个的:一个多语言、支持离线部署的跨平台 OCR 库,基于 PaddleOCR 模型转成 ONNX 格式,Python 几行代码就能拿到识别结果。 ## 上手前先看这几点 它把检测、方向分类、识别三件事拆成独立模块,你只管调接口。 - 中英文开箱即用,还支持日文、韩文等更多语言 - ONNX Runtime、Ope

gitblog_00976的博客 1116

Python 代码质量提升指南:静态分析与Lint工具

静态分析是指在不运行代码的情况下对代码进行检查的过程。它可以帮助开发者发现潜在的问题、不符合编码规范的地方以及可能的性能瓶颈。对于 Python 而言,静态分析工具可以自动检测代码中的语法错误、未使用的变量、重复代码块等问题。

2501_91173114的博客 450

Python代码检测与监控实战:从静态分析到生产环境可观测性

代码检测与监控是现代软件工程保障应用质量的核心实践。其原理是通过静态分析工具在开发阶段检查代码语法、风格与潜在缺陷,再结合动态分析在运行时洞察性能瓶颈与资源使用。这套体系的技术价值在于能系统性提升代码健壮性、可维护性,并预防线上故障。在Python开发中,典型的应用场景包括使用Flake8、Pylint进行代码规范检查,利用Mypy进行类型安全增强,并通过cProfile、memory_profiler进行性能与内存分析。本文聚焦于如何将**代码检测**与**监控**体系化,构建从本地开发到生产部署的全链路

weixin_30800807的博客 359

如何在 Sublime Text 4 中快速构建完整 Python IDE:Anaconda 终极指南

Anaconda 是一个功能强大的 Sublime Text 插件,能将轻量级的 Sublime Text 编辑器转变为功能完备的 Python 集成开发环境。它集成了 Jedi 智能代码补全、PyFlakes 语法检查、pep8 代码风格检查、MyPy 类型检查、PyLint 代码质量分析、pep257 文档规范检查和 McCabe 代码复杂度分析等众多专业工具,为 Python 开发者提供了一

gitblog_00878的博客 728

如何在Sublime Text 4中快速搭建Python IDE:Anaconda终极配置指南

Anaconda是一款专为Sublime Text设计的Python开发增强插件,它将轻量级的文本编辑器转变为功能齐全的Python集成开发环境。通过集成Jedi智能补全、PyFlakes代码检查、pep8风格检查、MyPy类型检查、PyLint静态分析、pep257文档检查以及McCabe复杂度分析等工具,Anaconda为Python开发者提供了专业级的开发体验,同时保持Sublime Tex

gitblog_00012的博客 454

Python中常用的静态代码分析工具有哪些?

Python静态代码分析工具种类繁多,每种工具都有其独特的功能和优势。通过合理选择和集成这些工具,可以显著提高代码质量和安全性,减少后期维护成本。无论是初学者还是经验丰富的开发者,都可以从这些工具中受益匪浅。未来,随着技术的发展,静态代码分析工具将会变得更加智能和高效,为开发者提供更强大的支持。

wang15510689957的博客 1270
上一篇: 十行代码,用Python做一个迷你版的美图秀秀
下一篇: 6个接私活的网站,你有技术就有钱!
菜鸟学Python
博客等级 码龄9年 8086粉丝 571原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值