错误调试和测试
由于出错返回的值可能与正常值混杂在一起,带来不便,因此,python中有各种函数来返回程序错误的信息。
错误处理
1 try
运行
用try:
来运行一段代码,运行到错误的地方则暂停返回错误信息
>>> try:
r=10/0
except ZeroDivisionError as e:#有很多不同的except语句来处理不同的错误
print('except',e)#在except语句后还可以有一个else语句。类似于ifelse
finally:#可以没有finally语句
print('Fine')
except division by zero#错误未发生时不会执行except语句
Fine
错误与其继承关系:链接
不需要在所有可能出错的地方设except。
2 调用堆栈
如果错误没有捕获,那么会一直上抛溯源,直到找到源头,返回错误。
这是我们一般直接使用idle或者编译器会给出的反馈。
这种方式,在遇到一个错误之后就会找到错误的根源然后退出程序。
3 记录错误
import logging
def foo(s):
return 10/int(s)
def bar(s):
return 2*foo(s)
def main():
try:
bar('0')
except Exception as e:
logging.exception(e)
main()
print('end')
idle界面
ERROR:root:division by zero
Traceback (most recent call last):#错误溯源
File "D:/ZQC/2020寒假学习计划/python/Sy_15_ExploreError.py", line 13, in main
bar('0')
File "D:/ZQC/2020寒假学习计划/python/Sy_15_ExploreError.py", line 9, in bar
return 2*foo(s)
File "D:/ZQC/2020寒假学习计划/python/Sy_15_ExploreError.py", line 6, in foo
return 10/int(s)
ZeroDivisionError: division by zero#错误原因
end#程序继续运行,打印end
3 抛出错误
由于错误是一种类,因此,我们可以自己定义一个错误类型。
但是我们一般不这么搞。
作业:
int改为float即可。
调试
罗马不是一天建成的,只吃第四个包子是不可能饱的。因此,程序就有不可避免的调试过程。据(个人梦里)统计,100%的 程序员都写过BUG。
1 老方法,一个个print
出来
2 assert
凡是可以用print的都可以用assert
def str2num(s):
assert float(s)!=0,'n is zero'#n是0时执行‘n is zero!’语句。
return float(s)
但是assert语句可以通过参数关闭,关闭后就可以当成pass来看待。虽然我觉得这个还是很难受吧。
3 logging
logging语句的好处在于可以自由选择输不输出错误信息,将错误信息输送到哪里(它不会抛出错误,仅仅只是记录错误)。
4 pdb
python调试器pdb,程序以单步方式运行。
pbd.set_trace()
可以设置断点运行。
5 IDE
算了好麻烦啊,憋在idle上狗着了,Pycharm真香!
单元测试
对一个模块/类/函数的功能进行测试
就是你自己编写一个测试类来对程序进行测试。(大概)
文档测试
嗐现在好像还用不到,pass。
网友评论