Python中的调试(assert, logging, pdb, pdb.set_trace(), IDE)
2017-07-27 15:15
489 查看
IDE
调试简单的话,莫过于一个IDE,可以用PyCharm, 或Eclipse加入pydev插件。pdb.set_trace()
所谓的pdb.set_trace()方式就是。在需要暂停的代码行下面加一行
pdb.set_trace()
参考do_pdb.py
比如
import pdb #首先需要导入 s = '0' n = int(s) pdb.set_trace() #运行到这里会自动暂停 print(10 / n)
可以用命令p查看变量,用命令c继续运行
#按c之后的 D:\python>python err.py > d:\python\err.py(6)<module>() -> print(10 / n) (Pdb) c Traceback (most recent call last): File "err.py", line 6, in <module> print(10 / n) ZeroDivisionError: division by zero
pdb
s = '0' n = int(s) print(10 / n)
输入python -m pdb err.py
启动python的调试器,让程序以单步方式运行,
**输入1查看代码。输入n单步执行代码。输入q结束调试。
p 变量n :来查看变量n的值**
D:\python>python -m pdb err.py > d:\python\err.py(2)<module>() -> s = '0' (Pdb) 1 1 (Pdb) n > d:\python\err.py(3)<module>() -> n = int(s) (Pdb) 1 1 (Pdb) p n *** NameError: name 'n' is not defined (Pdb) n > d:\python\err.py(4)<module>() -> print(10 / n) (Pdb) p n 0 (Pdb) q
参考https://www.liaoxuefeng.com/wiki/0014316089557264a6b348958f449949df42a6d3a2e542c000/001431915578556ad30ab3933ae4e82a03ee2e9a4f70871000
assert
其实还有最简单粗暴就是直接用print输出def foo(s): n = int(s) print('>>> n = %d' % n) return 10 / n def main(): foo('0') main()
但是用print()最大的坏处是将来还得删掉它,想想程序里到处都是print(),运行结果也会包含很多垃圾信息。所以,我们又有第二种方法
用 assert,就是把print替换成assert,
同时assert本身就会抛出AssertionError错误:
程序中如果到处充斥着assert,和print()相比也好不到哪去。不过,启动Python解释器时可以用-O参数来关闭assert:
logging
import logging s = '0' n = int(s) logging.info('n = %d' % n) print(10 / n)
执行后
Traceback (most recent call last): File "d:\python\err.py", line 5, in <module> print(10 / n) ZeroDivisionError: division by zero
如果只有ZeroDivisionError则在
import logging后面加个配置
import logging logging.basicConfig(level=logging.INFO) s = '0' n = int(s) logging.info('n = %d' % n) print(10 / n)
logging的好处,它允许你指定记录信息的级别,有debug,info,warning,error等几个级别,当我们指定level=INFO时,logging.debug就不起作用了。同理,指定level=WARNING后,debug和info就不起作用了。这样一来,你可以放心地输出不同级别的信息,也不用删除,最后统一控制输出哪个级别的信息。
logging的另一个好处是通过简单的配置,一条语句可以同时输出到不同的地方,比如console和文件。
参考https://www.liaoxuefeng.com/wiki/0014316089557264a6b348958f449949df42a6d3a2e542c000/001431915578556ad30ab3933ae4e82a03ee2e9a4f70871000
相关文章推荐
- Python学习 Day 12 调试 断言 logging pdb pdb.set_trace
- Python基础-调试print()-assert-logging-pdb-ide
- python 调试: print / assert / logging / pdb
- 【Python】代码调试(pdb与logging使用)
- 使用pdb调试Python程序
- Python笔记:pdb调试
- python 调试技巧-pdb
- python错误调试--assert
- Python详解之调试:pdb
- pdb调试python
- 用PDB库调试Python程序
- python程序中的调试:pdb
- 使用pdb调试python脚本
- 用PDB库调试Python程序
- python调试神器pdb简介
- PDB命令行调试Python程序
- 初学python------pdb调试命令
- 用PDB库调试Python程序
- Python 调试工具 PDB(Linux 环境下调试)
- pdb通过Python调试的一点心得