python的调试包括:代码调试,单元测试,文档测试。
在程序运行中,总会遇到各种各样的错误,有的错误时编程代码有问题造成的,这种错误我们通常称为BUG,BUG是必须修复的,
还有的错误时用户输入造成的,这种能够错误可以通过检查用户的输入来做相应的处理。
还有一种错误是完全无法唉程序运行过程中预测的,比如写文件,磁盘满了写不进去了,比如从网络中抓取数据,突然断网了,
通常这种错误称为异常,在程序中这种必须要处理的,否则程序会因为问题而退出。
遇到错误最原始的方式结局方法是实现约定一个错误代码,这样就知道是否有错,在操作系统提供的调用中非常常用
1.函数本身返回的数据与错误码会混在一起,需要大量的判断是否出错,
2.一旦出错,需要一级一级上报,知道讴歌函数可以处理。
try……except……else 语句
try:
语句
expect 错误表示码 as e:
语句1
……
expect 错误表示码 as e:
语句N
else:
语句e
用来将检测try语句块中的错误,如果有错误让except语句捕获异常并处理。
1.如果try后的语句执行时发生了异常,就调回到执行try并执行第一个匹配该异常的except语句,异常处理结束
就结束整个try语句(除非处理异常时引发新的异常)
2.如果try后的语句执行时发生了异常,但是没有匹配的except子句,异常提交到上一层try,或者到程序的最上层,
到最上层就结束了。
3.如果try后的语句执行时没有发生异常,就不会匹配expect,如果有else语句就执行else 最后结束整个try语句。
1.使用except不带任何错误类型,捕获任何异常,
2.使用except而带有多种异常类型,同时匹配多种异常,用元组扩起来。
1.python中的错误实际上是类,所有的错误类型都继承自BaseExpectionn,在使用时注意父类会将子类异常一网打尽。
2.如果我们跨越多层调用,最后错误会被传上来。
无论try语句块是否发生异常 都会处理最后的finmlly代码
写好代码能直接运行的概率非常小,总会在不经意之间出现很多的BUG,有的bug很简单,但是有的bug非常难。
将来得删除调试的print,运行结果也会包含一些垃圾信息
凡是可以用print调试的地方,都可以通过断言来代替。
assert 语句, "输出"
当程序执行到assert语句时,首先执行语句内的表达式,如果为真继续向下执行,否则断言失败,assert会抛出
AssertionError异常,异常的信息为第二个表达式的值。
也是臃余
在启动程序时可以通过命令关闭assert 在运行之前加-O就取消了
不会抛出异常 但是能写到文件里
import logging
logging.basicConfig(level=logging.INFO)
使用:python的调试器,让程序能单步方式,可以随时查看运动动态
python -m pdb xxx.py
n: 单步执行代码
p 变量名:查看变量
q:退出调试
缺点:麻烦,只能一行一行的执行
pdb.set_trace() 设置在要调试 的前边 调试是 直接python xxx.py
print("-------------1")
a = 1
print("-------------2")
print("-------------3")
b = 2
print("-------------4")
print("-------------5")
print("-------------6")
print("-------------7")
c = 3
n = "0"
n = int(n)
print(10 / n)
print("-------------8")
print("-------------9")
用来对一个函数、一个类或者一个模块来进行正确性检测的测试工具。
1.单元测试通过:说明这个函数或者类能够正常通过,
2.单元测试不通过:要么有BUG,要么测试的条件输入不正确。
1.假设对函数的代码进行了修改,只需再跑一次单元测试,如果通过说明此时的修改不会对函数的原有行为造成影响。
2.确保一个程序模块的行为符合设计的测试用例,在姜凯修改的时候,可以极大的保证该模块依然正确
把注释当做代码执行 格式按照python交互式格式进行