内容整理于廖雪峰官网
logging
调试中需要知道出错时,哪些变量的值是正确的哪些变量的值是错误的。
可以用print输出值,在输出中查找打印的变量值。但需要在调试后删除print()。
- assert
assert expression[ , arguments]可省略arguments参数
相当于
if not expression:
raise AssertionError(arguments)
assert n != 0, 'n is zero!
使用断言语句,如果n=0,则输出AssertionError: n is zero
assert可以在启动python解释器的时候关闭,是大写字母O:$ python -O err.py( 表 示 命 令 行 中 输 入 , 实 际 并 不 要 输 入 表示命令行中输入,实际并不要输入 表示命令行中输入,实际并不要输入)
- logging
不会抛出错误,可以输出到文件。
1、logging通过配置level,允许指定记录信息的级别,有debug,info,warning,error等几个级别,当我们指定level=INFO时,logging.debug就不起作用了。同理,指定level=WARNING后,debug和info就不起作用了。可以输出不同级别的信息,也不用删除,最后统一控制输出哪个级别的信息。
2、通过简单的配置,logging一条语句可以同时输出到不同的地方,比如console和文件。
import logging
logging.basicConfig(level=logging.INFO)
s = '0'
n = int(s)
logging.info('n = %d' % n)
print(10 / n)
pdb
- pdb
在Jupyter中,使用%pdb on,在出现异常后自动进入调试模式。p 变量名 输出变量,c 继续运行,up返回异常的上层函数。 - pdb.set_trace()
不需要单步执行,import pdb,在可能出错的地方放置pdb.set_trace()就可以设置断点。特别适用于较长的程序。
出现Pdb调试之后,使用命令 p 变量名输出变量,命令 c继续运行。
# err.py
import pdb
s = '0'
n = int(s)
pdb.set_trace() # 运行到这里会自动暂停
print(10 / n)
IDE
如果要比较爽地设置断点、单步执行,就需要一个支持调试功能的IDE。
目前比较好的Python IDE有:
Visual Studio Code:https://code.visualstudio.com/,需要安装Python插件。PyCharm:http://www.jetbrains.com/pycharm/