python程序的调试方法
【转自:http://blog.csdn.net/luckeryin/article/details/4477233】
本文讨论在没有方便的IDE工具可用的情况下,使用pdb调试python程序
源码例子
例如,有模拟税收计算的程序:
#!/usr/bin/python
def debug_demo(val):
if val <= 1600 :
print "level 1"
print 0
elif val <= 3500 :
print "level 2"
print (val - 1600) * 0.05
elif val <= 6500 :
print "level 3"
print (val - 3500) * 0.10 + (3500-1600) * 0.05
else:
print "level 4"
print (val - 6500) * 0.20 + (6500-3500) * 0.10 + (3500-1600) * 0.05
#~def debug_demo
if __name__ == "__main__":
debug_demo(4500)
debug_demo函数计算4500的入账所需的税收。
如何调试?
1.加入断点
在需要插入断点的地方,加入红色部分代码:如果_DEBUG值为True,则在该处开始调试(加入_DEBUG的原因是为了方便打开/关闭调试)。
#!/usr/bin/python
_DEBUG=True
def debug_demo(val):
if _DEBUG == True:
import pdb
pdb.set_trace()
if val <= 1600 :
print "level 1"
print 0
elif val <= 3500 :
print "level 2"
print (val - 1600) * 0.05
elif val <= 6500 :
print "level 3"
print (val - 3500) * 0.10 + (3500-1600) * 0.05
else:
print "level 4"
print (val - 6500) * 0.20 + (6500-3500) * 0.10 + (3500-1600) * 0.05
#~def debug_demo
if __name__ == "__main__":
debug_demo(4500)
2.开始运行调试
运行程序./debug_demo.py,得到
> /usr/local/qspace/user_network/debug_demo.py(7)debug_demo()
-> if val <= 1600 :
(Pdb)
-> val <= 1600 : 指示当前执行的语句,(Pdb)等待你的调试指令. pdb的指令很丰富,输入h指令可以查看指令的使用方法。下面简单介绍常用指令:
查看代码上下文,l(小写L)
(Pdb) l
2 _DEBUG=True
3 def debug_demo(val):
4 if _DEBUG == True:
5 import pdb
6 pdb.set_trace()
7 -> if val <= 1600 :
8 print "level 1"
9 print 0
10 elif val <= 3500 :
11 print "level 2"
12 print (val - 1600) * 0.05
(Pdb)
左边是行号,右边是代码正文。
监视变量:p 变量名
(Pdb) p val
4500
(Pdb)
单步执行: n
-> elif val <= 3500 :
(Pdb) l
5 import pdb
6 pdb.set_trace()
7 if val <= 1600 :
8 print "level 1"
9 print 0
10 -> elif val <= 3500 :
11 print "level 2"
12 print (val - 1600) * 0.05
13 elif val <= 6500 :
14 print "level 3"
15 print (val - 3500) * 0.10 + (3500-1600) * 0.05
加入断点:b 行号
(Pdb) b 14
运行到断点: c
(Pdb) c
> /*****
-> print "level 3"
(Pdb) l
9 print 0
10 elif val <= 3500 :
11 print "level 2"
12 print (val - 1600) * 0.05
13 elif val <= 6500 :
14 B-> print "level 3"
15 print (val - 3500) * 0.10 + (3500-1600) * 0.05
16 else:
17 print "level 4"
18 print (val - 6500) * 0.20 + (6500-3500) * 0.10 + (3500-1600) * 0.05
19
执行到函数返回前: r
(Pdb) r
level 3
195.0
--Return--
> /****()
->None
-> print (val - 3500) * 0.10 + (3500-1600) * 0.05
(Pdb)
说明:
pdb还有很多其他很多有用的指令,读者可以自行探索。输入h,h 命令。就可以得到命令的详细帮助。
不过,我个人认为一般无需启动这种调试方法,一般使用日志输出进行调试即可,除非遇到了非常微妙的错误。这时,单步调试的威力便显示出来了
python程序的调试方法的更多相关文章
- [转] python程序的调试方法
qi09 原文 python程序的调试方法 本文讨论在没有方便的IDE工具可用的情况下,使用pdb调试python程序 源码例子 例如,有模拟税收计算的程序: #!/usr/bin/python de ...
- Windows系统中设置Python程序定时运行方法
Windows系统中设置Python程序定时运行方法 一.环境 win7 + Python3.6 二.步骤 1,在Windows开始菜单中搜索“计划任务”,并且点击打开“计划任务”: 2.点击“创建基 ...
- 微信小程序开发系列教程三:微信小程序的调试方法
微信小程序开发系列教程 微信小程序开发系列一:微信小程序的申请和开发环境的搭建 微信小程序开发系列二:微信小程序的视图设计 这个教程的前两篇文章,介绍了如何用下图所示的微信开发者工具自动生成一个Hel ...
- Python入门(一):PTVS写Python程序,调试模式下input()提示文字乱码问题
前两天写了Python入门(一),里面提到,使用VS2013+PTVS进行Python开发. 就在准备为第二篇写个demo的时候,发现了一个问题,各种解决无果,有些纠结 Python中输入函数是inp ...
- 添加树莓派python程序自启动的方法
首先确保网络,硬件连接都正确.保证py程序可以正确运行. 然后远程登录树莓派 打开这个文件来修改自启动,网上有很多方法都是新建一个脚本来完成的.由于我们是自启动python文件,所以命令会有不同. 如 ...
- linux环境下python的pdb调试方法
一些常用指令: h(elp) [comman] #打印可用指令及帮助信息 r(eturn) #运行代码直到下一个断点或当前函数返回 b(reak) [[filename:]lineno | fun ...
- js程序的调试方法
- Python Flask API实现方法-测试开发【提测平台】阶段小结(一)
微信搜索[大奇测试开],关注这个坚持分享测试开发干货的家伙. 本篇主要是对之前几次分享的阶阶段的总结,温故而知新,况且虽然看起来是一个小模块简单的增删改查操作,但其实涉及的内容点是非常的密集的,是非常 ...
- 二十四、【开源】EFW框架Winform前端开发之项目结构说明和调试方法
回<[开源]EFW框架系列文章索引> EFW框架源代码下载V1.2:http://pan.baidu.com/s/1hcnuA EFW框架实例源代码下载:http://pan ...
随机推荐
- sql server手工注入
sql server手工注入 测试网站testasp.vulnweb.com 1. http://testasp.vulnweb.com/showforum.asp?id=0 http://testa ...
- hdoj-2025
#include "stdio.h"#include "string.h"void sort(char ch[],int count[],int n,int f ...
- HTML的常用标签
<!--编写HTML常用的标签 文字版面的编辑 格式标签 文本标签 超链接和锚点 图像和图像地图 --> <!DOCTYPE html PUBLIC "-//W3C//DT ...
- 1、网页制作Dreamweaver(界面、基本操作、锚点、表格)
界面 网页的界面html由两部分组成:<head>和<body>,<title>放在<head>中 1.以下是<head>部分的解释: &l ...
- java学习第十天
第十二次课 目标 一维数组(创建访问) 一.概念与特点 1.概念 相同数据类型的有序集合[] 数组名: 容器的名字 元素: 下标变量,数组名[下标] 长度: length 下标: 位置.索引 ...
- 第二个Sprint冲刺第九天
讨论地点:宿舍 讨论成员:邵家文.李新.朱浩龙.陈俊金 工作:接着昨天的任务
- ios layoutsubView 何时被调用
-layoutSubviews方法:这个方法,在UIView中默认没有做任何事情,需要子类进行重写.UIView是一个纯净的视图,里面没有任何子控件,所以不会做什么事情.一般系统自带控件中有子控件的都 ...
- Qt的quit(),exit()以及close()事件捕获
使用QT编辑界面,其中带来很大方便的一点就是Qt中自带丰富的.种类齐全的类及其功能函数,程序员可以在编辑程序的过程中简单地直接调用.关于窗口关闭的操作,在这里指出常用的三个槽,即quit() ...
- 【avalon】data
if (root.dataset) { avalon.fn.data = function (name, val) { name = name && camelize(name) va ...
- 应用Druid监控SQL语句的执行情况(转)
Druid是什么? Druid首先是一个数据库连接池.Druid是目前最好的数据库连接池,在功能.性能.扩展性方面,都超过其他数据库连接池,包括DBCP.C3P0.BoneCP.Proxool.JBo ...