【学习记录】Python

【学习记录】Python3版本(8:错误调试和测试)

2020-03-08  本文已影响0人  天有三光

错误调试和测试

由于出错返回的值可能与正常值混杂在一起,带来不便,因此,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。

上一篇 下一篇

猜你喜欢

热点阅读