python错误、调试和测试

1.错误处理

1)try...except...finally

try:
    print('try...')
    r = 10 / int('a')
    print('result:', r)
except ValueError as e:
    print('ValueError:', e)
except ZeroDivisionError as e:
    print('ZeroDivisionError:', e)
finally:
    print('finally...')
print('END')

2) 出错的时候,一定要分析错误的调用栈信息,才能定位错误的位置。

3)Python内置的logging模块可以非常容易地记录错误信息

4)raise抛出错误实例

# err_raise.py
class FooError(ValueError):
    pass

def foo(s):
    n = int(s)
    if n==0:
        raise FooError('invalid value: %s' % s)
    return 10 / n

foo('0')

2.调试

1)print

2)assert

3)logging

和assert相比,不会抛出错误,且可以输出到文件

import logging

s = '0'
n = int(s)
logging.info('n = %d' % n)
print(10 / n)
import logging
logging.basicConfig(level=logging.INFO)

这就是logging的好处,它允许你指定记录信息的级别,有debuginfowarningerror等几个级别,当我们指定level=INFO时,logging.debug就不起作用了。同理,指定level=WARNING后,debuginfo就不起作用了。

4)pdb

让程序以单步方式运行,随时查看运行状态

5)pdb.set_trace()

这个方法也是用pdb,但是不需要单步执行,我们只需要import pdb,然后,在可能出错的地方放一个pdb.set_trace(),就可以设置一个断点

# err.py
import pdb

s = '0'
n = int(s)
pdb.set_trace() # 运行到这里会自动暂停
print(10 / n)

3)单元测试

对一个模块、一个函数、一个类进行正确性检验的过程

setUp和tearDown

4)文档测试

doctest非常有用,不但可以用来测试,还可以直接作为示例代码。通过某些文档生成工具,就可以自动把包含doctest的注释提取出来。用户看文档的时候,同时也看到了doctest。

原文地址:https://www.cnblogs.com/quanmeng/p/11887071.html