错误try……except……else……finally 记录错误logging 抛出错误raise
1、错误处理机制 try……except……finally
格式:
try:
可能出错的代码
except xxx1Error as e:
处理1
except xxx2Error as e:
处理2
except xxx3Error as e:
处理3
……
else:
处理n
finally:
最终处理
运行步骤:
try语句没错误,执行try、else和finally;
有错误,根据碰到的第一个错误判断执行该错误对应的Error
最后无论有无错误,最后都会执行finally(finally可以省略不写)
2、记录错误
logging模块,使用前要先
import logging
作用:记录错误,并且跳过错误节点,让程序继续进行(正常情况下出错则程序停止运行)
举例:一个除0错误的记录,并在发生错误后程序仍能继续运行后半部分
import logging def foo(s): return 10/int(s) def bar(s): return foo(s)*2 def main(): try: bar('0') except Exception as e: logging.exception(e) finally: print('finally') #运行 main() print('End') #错误发生在main(),而main()后的程序仍能继续运行 Error: division by zero finally End
3、抛出错误raise
如果程序中只是一个单raise,那就会把当前错误原样抛出。
另外,在Except中raise一个Error,还可以把一种类型的错误转化为另一种类型
try: 10/0 except ZeroDivisionError: raise ValueError('input error!')
但应注意符合逻辑,比如就不能把IOError转化为不相干的ValueError