错误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

 

posted @ 2020-09-21 21:28  ShineLe  阅读(168)  评论(0)    收藏  举报