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
的好处,它允许你指定记录信息的级别,有debug
,info
,warning
,error
等几个级别,当我们指定level=INFO
时,logging.debug
就不起作用了。同理,指定level=WARNING
后,debug
和info
就不起作用了。
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。