Python中异常处理

错误处理

  在程序运行的过程中,如果发生了错误,可以实现约定一个错误代码,这样就可以知道是否有错,以及出错的原因,在操作系统的调用中,返回错误码的非常常见。因此,在高级语言通常都内置了一套try……except……finally……错误处理机制,Python业不例外。

  

#try的机制
try:
    print("try...")
    r = 10/0
    print('result', r)
except ZeroDivisionError as e:
    print("except:", e)
finally:
    print("finally...")
print("END")   

  错误应该有很多种类,如果发生了不同类型的错误,应该由不同的except语句块处理,但是Python的错误也是class,所有的错误类型都继承自BaseException,所以咋使用except时,需要注意的是,它不但捕获类型的错误,还把其他的子类业一网打尽。

  调用栈

  如果错误没有捕获,它就会一直向上抛,最后被Python解释器捕获,打印一个错误信息,然后程序退出

  

def foo(s):
    return 10/int(s)

def bar(s):
    return foo(s)*2

def main():
    bar('0')
main()

  出错的时候,一定要分析错误的调用栈的信息,这才能定位错误

  

  记录错误

  如果不捕获错误,自然可以让Python解释器来打印的错误堆栈,但是程序也被结束了,既然我们能捕获错误,就可以把错误堆栈打印出来,然后分析错误的原因,同时让程序继续执行下去。

  Python内置的logging模块可以非常容易的记录错误信息:

 

import logging

def foo(s):
    return 10/int(s)
def bar(s)
    return foo(s)*2

def mian():
    try:
        bar('0')
    except Exception as e:
        logging.except(e)
main()
print("END")       

  同样是出错,但是程序打印完信息会继续执行,并且正常退出

  抛出错误

  因为错误class,捕获一个错误就是捕获到该class的一个实例,因此,错误并不是凭空产生的,而是有意创建并抛出的,Python的内置函数会抛出很多类型的错误,我们自己编写的函数也可以抛出错误。

  

猜你喜欢

转载自www.cnblogs.com/baizhou1230/p/9138070.html