Python学习:try_except

Python里面的错误捕获模式是try_except模式,try的作用就是尝试下面的的代码块可能会出现的错误,假如try里面的语句出现了一个错误,那么它就应该被excepet语句捕获到,但是请注意,这意味着你在try里面产生的错误类型必须是except语句捕获错误类型或者它的子类,否则就不能捕获.这样你的错误类型就会沿着栈一直被上传,直到它被捕获或者被解释器捕获.这个时候解释器就会调用一个traceback来追踪错误的路径,直到发现最原始的错误产生地点.

一般发生错误后且没有捕获到或者捕获到又抛出就会停止代码的运行,但是我们可以用finally来继续代码的运行,这意味着finally的部分是一定要执行的.

另外raise的作用是把这个错误继续抛出给栈的上一级,还可以用raise转换错误类型.

[0]举个例子,在这个代码里面,foo最先捕获错误,它知道这是ValueError,然后抛出这个错误,被bar捕获到,bar捕获到这个错误后就会处理它,但是这个这个处理只是打印出来错误信息,然后继续抛出错误,这个错误被解释器捕获,反过来追踪错误的情况.这一套过程可以理解为小员工犯错,然后是自己处理(except里面),继续工作,还是认为这个错误不能被处理,那么就需要raise这个错误,并且后续的工作都不会被执行了.或者后面有一定要执行的工作,无论错误是否能被自己处理都要执行(finally)。上级同样按照这个方式处理,一旦他继续上传错误,那么后面的工作就不会执行,否则会继续工作,如果错误一直没有被捕获(没有上级捕获这个错误)或者一直被上传(上级不能处理),那么错误就会一直被上传到ceo那里(有可能是上级一层一层上传,也可能是无人处理错误自己会最终暴露出来),这时候就会清查所有的错误传递情况(traceback)。

def foo(s):
    n = int(s)
    if n == 0:
        raise ValueError('invalid value: {}'.format(s))
    return 10 / n

def bar():
    try:
        foo('0')
    except ValueError as e:
        print('ValueError!')
        raise

你可能感兴趣的:(Python学习:try_except)