错误、调试与测试
Python基础系列内容为学习廖雪峰老师Python3教程的记录,廖雪峰老师官网地址:廖雪峰Python3教程
错误处理:Python内置了一套
try...except...finally...
的错误处理机制来处理错误。其工作原理为:程序先尝试执行try
语句块内的内容,如果发生错误,则转向except
语句块内的内容执行,最后执行finally
语句块内的语句。因而,在写代码把可能出错的代码写在try
语句块内,这样当程序发生错误时就会跳过相应语句块继续执行而不会异常退出。让我们来看一下其工作机制:try: print('try...') r = 10 / 0 print('result:', r) except ZeroDivisionError as e: print('except:', e) finally: print('finally...') print('END')
上面的代码在执行时会发生一个除0错误,让我们来运行一下:
try... except: division by zero finally... END [Finished in 0.8s]
看得出来,上面的代码执行到到
r=10/0
出错后转到except
语句继续执行而不是立即退出,最后执行了finally
。另外值得一提的是except
可以抛出很多类型的错误,这些错误可以在这里看到:https://docs.python.org/3/library/exceptions.html#exception-hierarchy记录错误:当我们使用
try...except...finally...
语句处理错误时,虽然让程序跳过错误继续执行,但是我们在后期可能需要知道这些错误信信息以便程序改进 ,Python内置的logging
模块可以非常容易的记录错误信息,其可以方便的设定打印信息的级别,也可以设定打印的位置(比如控制台或者输出文件),其打印信息级别分为:DEBUG
、INFO
、WARNNING
、ERROR
。下面看一个实例:import logging#导入logging包 logging.basicConfig(level=logging.INFO)#设定打印等级为:WARNNING try: s = '0' n = int(s) logging.info('n = %d' % n)#打印信息到控制台 print(10 / n) except ZeroDivisionError as e: logging.info(e) finally: print("program executes done!")
我们来看一下输出:
INFO:root:n = 0 INFO:root:division by zero program executes done! [Finished in 0.2s]
我们来分析上面代码的结果:程序首先执行
try
语句块的内容,然后logging.info('n = %d' % n)
语句打印出了第一个控制台信息:INFO:root:n = 0
,然后语句print(10 / n)
出错,程序跳过该语句执行except
中的内容,然后打印出了出错信息INFO:root:division by zero
,最后程序执行finally
内的语句打印出信息:program executes done!
。调试:暂定
单元测试:暂定
文档测试:暂定