错误处理
- 使用错误代码 代指 错误类型
- 正常结果与错误码混合在一起,容易混淆
- 一旦出错,还得一层层上报
- 错误也是一个类,错误与错误之间也有者关系,例如父子关系
- 需要对不同类型的错误进行识别与区分,并针对性的进行处理
- python的错误是class,所有的 都继承自 BaseException
try:
foo()
except ValueError as e:
ssss
except xxxx:
ssss
finally:
ssss
- 需要注意,如果代码捕获的错误有父子关系,子在前,父在后,防止提前被捕获
- try-except的好处在于 可以跨越多层捕获,只要main捕获到就ok
- 若未被捕获,则会一直往上抛,直到被python解释器捕获,最终打印出来
- 打印的顺序是从高往低
- 最终可以定位到错误语句
- python解释器打印错误信息,会将程序中止
- python内置的logging模块可以很容易的记录错误信息
import logging
logging.exception(e)
- 有的时候,我们捕获了错误,但是不知道如何处理,可以先打印信息,然后继续raise(不带参数)抛出
调试
- print (low)
- 断言
- eg:
assert n!=0, 'n is zero'
- n必须为0,否则抛出
AssertionError: n is zero
- python解释器可以用 -0 参数关闭assert,之后就相当于pass
- logging
- 使用logging代替print,打印变量的值
- logging.basicConfig(level=logging.INFO) 定义日志等级
- debug,info,warning,error,靠右原则,info时debug失效
- pdb
- ide的端点debug
单元测试
文档测试
- python官方文档文友一些示例代码
- doctest可直接提取注释中的代码并执行测试
- 运行py,啥问题没有,就说明示例代码写的没有问题