Python技术迷

有哪些工具可以帮助查找错误或执行静态分析?:(pdb, pylint, mypy等)

说到最近调 bug,都快被逼疯了... 说真的,代码出错你说咋整啊,光靠肉眼瞪半天基本没用,尤其那种藏得贼深的。对了,我印象里大概前天晚上十一点多,我还在家沙发上撸猫,突然想到其实现在查错误的工具挺多的,静态分析啊、断点调试啊啥都有,随手就能用。反正你要是真想少掉头发,下面这几个 Python 下的神器可以试试——

pdb:调试器界的“毛细血管”

我一般就是写脚本跑不通,第一反应就是import pdb;pdb.set_trace()插一行。你们别嫌土,pdb真管用。它其实和 pycharm 断点差不多,但有时候你手里只有 ssh、连 IDE 都没有... 那就只能靠它了。

比如你 main 里遇到莫名其妙的错误,你直接插一句:

import pdb; pdb.set_trace()

然后你程序跑到那就会停下,控制台输入 n(下一步),c(跑到下一个断点),l(看代码),p(打印变量)啥的,全能用,感觉有点回到写 C 的年代,贼朴素但绝对顶用。

pylint:写完就要被它喷一顿

上周末我还帮朋友看了个项目,他问为啥总有同事写的代码他一看就一头问号,命名不规范、缩进乱七八糟。这时候我就说“你让他装个pylint,写完自动过一遍。”真是毒舌机器人,只要风格、变量、注释有点小瑕疵它都能给你挑出来。比如:

pylint my_script.py

输出全是建议和警告,一开始看着烦,习惯了其实很省事。有些“未使用变量”“不规范函数名”直接就给你亮红灯。

mypy:类型标注不是摆设

还有 mypy,这玩意其实以前我觉得鸡肋...直到有回线上出 bug,函数类型标错了直接传了个 str,结果运算全挂了。后来写函数都加注解,mypy 一扫,类型不对立马警告你。像这样:

defadd(a: int, b: int) -> int:
return a + b

# 错误用法
add("hello", 1)

用 mypy 扫一遍:

mypy my_script.py

它会说:Argument 1 to "add" has incompatible type "str"; expected "int"

有点像给 Python 装了个迷你类型系统吧,尤其多人协作,大家类型乱写,后患无穷。

flake8/black/isort:规范不是说说而已

对了,写完代码如果你不想看见“代码风格有点问题”那种代码 review 的冷嘲热讽,最好再整个 flake8(查规范)、black(格式化)、isort(自动整理 import)这种组合拳。尤其 black,直接帮你排版好,再也没人喷你大括号对不齐啦,哈哈。

black my_script.py
isort my_script.py
flake8 my_script.py

其实工具有时候真的是救命稻草,不然有些 bug 你翻个几千行日志也找不着。像我前两天,凌晨一点,还在纠结为什么程序某个参数怎么都是 None,最后用 pdb 一步步调出来,原来是传参写反了... 那一瞬间真想给自己脑门贴个“呆”字。工具虽然没那么高大上,但有时候就是这么实用。

-END-

我为大家打造了一份RPA教程,完全免费:songshuhezi.com/rpa.html

🔥虎哥私藏精品🔥

虎哥作为一名老码农,整理了全网最全《python高级架构师资料合集》,总量高达650GB,点击下方公众号回复关键字 python 全部免费领