错误处理
try高级语言通常都内置了一套try…except…finally…的错误处理机制,Python也不例外
try: print(‘try…’) r = 10 / 0 print(‘result:’, r) except ZeroDivisionError as e: print(‘except:’, e) finally: print(‘finally…’) print(‘END’)
输出结果是这样的try… result: 5 finally… END
错误应该有很多种类,如果发生了不同类型的错误,应该由不同的except语句块处理。例如int(‘a’)会被ValueError捕获,因为’a’没法转化成一个整数值。
else可以添加一个else语句来表明没有错误发生的情况 else: print(‘no error!’)
Python的错误其实也是class,所有的错误类型都继承自BaseException,所以在使用except时需要注意的是,它不但捕获该类型的错误,还把其子类也“一网打尽。调用栈
如果错误没有被捕获,它就会一直往上抛,最后被Python解释器捕获,打印一个错误信息,然后程序退出。 记录错误如果不捕获错误,自然可以让Python解释器来打印出错误堆栈,但程序也被结束了。既然我们能捕获错误,就可以把错误堆栈打印出来,然后分析错误原因,同时,让程序继续执行下去。 Python内置的logging模块可以非常容易地记录错误信息,用法是
import logging同样是出错,但程序打印完错误信息后会继续执行,并正常退出。通过配置,logging还可以把错误记录到日志文件里,方便事后排查。
抛出错误
相当于自己定义一个错误的class。