打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
如何调试Python程序

工欲善其事,必先利其器。程序猿们往往喜欢挑一个最爱的开发环境。可是Pycharm,Eclipse,Komodo,Eric,WingWare。。。这么多Python的IDE看花眼了怎么办?即使你用baidu大法选好了一个你满意的,然后各种秘籍快捷都用熟用烂了。如果有一天,我是说如果,你心目中的女神找你帮忙看看代码,“你好,能帮我看一下这个问题是怎么回事吗?”,你心想我苦苦修炼的各种招式终于派上用场了。怀揣着激动和梦想跑过去一看,结果女神的机器并没有安装你用的烂熟的高大上工具,只有代码编辑器和终端命令窗口,这时你该如何让女神对你刮目相看?不想杯具的话,就继续阅读吧。

即使不用IDE你也应该有一套自己的独门秘笈,这里介绍介绍我的。

1. print大法

print大法一定是初学者首选。

觉得哪里有问题,就把哪里的变量打印出来看看。

  • 优点: 简单易行

  • 缺点: release前要全注释掉,增加重复工作量,不能忍


2. logging工具

使用系统库logging将print改为logging.debug(),就可以通过配置level达到log分级输出。

DEBUG<><><>CRITICAL

import logginglogging.basicConfig(        level=logging.WARNING,        format='%(asctime)s %(filename)s[line:%(lineno)d] %(levelname)s %(message)s',        datefmt='%a, %d %b %Y %H:%M:%S'        )logging.debug('This is debug message')logging.info('This is info message')logging.warning('This is warning message')

上面程序运行发现,log只显示warning信息。如果再加上filename参数还能很方便的支持输出log到文件,比如:

import logginglogging.basicConfig(        level=logging.WARNING,        format='%(asctime)s %(filename)s[line:%(lineno)d] %(levelname)s %(message)s',        datefmt='%a, %d %b %Y %H:%M:%S',        filename='test.log',        filemode='w')

从此我就喜欢上logging,只在代码编写初期顺手用一下print

不过有时候我预先并不知道问题在哪里,我也不是大牛,我羡慕那些用着支持断点调试开发环境的猿类。直到我遇到新的朋友。

3. pdb

pdb是python自带的调试库,当我想让程序停在某个地方,然后一步一步运行程序并且查看变量时,我只需要加入下面的代码

a=1
b=2
import pdbpdb.set_trace()c=b*ad=b/a
print d,c

然后有n(ext),s(tep),c(ontinue), b(reak),cl(ear)等一系列命令支持,我就等于有了一套支持断点调试的开发环境。

可是这里还是有个问题,就是刚才加入的调试代码在release前还要注释掉。

pdb的作者一定也考虑了这个问题。因此有了命令形式进入调试模式。

python -m pdb script.py

代码会在一开始停住,相当于你在程序开始运行第一行加了个断点。然后用命令b(reak)在你希望的行上加断点,然后c(ontinue)就可以啦。

用了pdb,妈妈再也不用担心我调程序了。可是爸爸有疑问了。有时候程序运行好久忽然崩溃了,我还不知道它崩在哪里,意思就是断点都不知道设在哪,怎么办。

怎样在崩溃时自动进入调试模式,这个问题困扰我很久,直到我学会上stackoverflow,发现这个牛人聚集的地方。

4. ipython

当你在有问题的代码前加上这段代码,它就可以帮助你在异常时进入ipdb调试模式。前提是你要安装ipython。

import sys
from IPython.core import ultratbsys.excepthook = ultratb.FormattedTB(mode='Verbose',     color_scheme='Linux', call_pdb=1)

你也可以把上面的代码保存成crash_debug.py,然后在你出问题的文件test.py头上加上

import crash_debug
for i in range(10,-1,-1):    y=1/i # 这里当i=0时程序会报错。

执行python test.py后输出如下:


大功告成。有了这四大法宝,我就再没有纠结过装哪个开发环境的问题,女神再找我,无需IDE我也能show一把我的抓虫大法。

你有什么独门秘笈,别藏着掖着了,也拿来分享一下吧。

没有人不爱惜自己的生命,却很少人珍视自己的时间

梁实秋


  注:

  1. 转载需全文转载,且注明原文链接,否则保留维权权利。

  2. 如对文中所提方法有疑问或建议的地方,欢迎和我联系service_at_heibanke.com。

本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
Python程序的性能分析指南
Python 四五事 安装使用经验
调试Python程序代码的几种方法总结
python3核心语法练习题 错误处理与调试
python Debug 单步调试
Jupyter Notebook的27个窍门,技巧和快捷键
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服