美文网首页
[笔记] Python核心编程 第十章

[笔记] Python核心编程 第十章

作者: 四明羽客 | 来源:发表于2018-03-19 09:46 被阅读17次

    try语句块中异常发生点后的剩余语句永远不会到达(所以也永远不会执行)。一旦一个异常被引发,就必须决定控制流下一步达到的位置。剩余代码将会被忽略,解释器将搜索异常处理器,一旦找到,就开始执行异常处理器中的代码。
    如果没有找到合适的异常处理器,那么异常就向上移交给调用者去处理,这意味着堆栈框架立即回到之前的那个。如果在上层调用者也没有找到对应的异常处理器,该异常还会继续被向上移交,直到找到合适的异常处理器。如果达到最顶层仍然没有找到对应的异常处理器,那么就认为这个异常未处理,Python解释器会显示出跟踪记录,然后退出。

    同时处理多个异常

    except (Exc1[, Exc2[, ...ExcN]])[, reason]:
        suite_for_exception_Exc1_to_ExcN
    
    - BaseException
        |- KeyboardInterrupt
        |- SystemExit
        |- Exception
            |- (all other current built-in exceptions)
    

    所以如果要捕获所有的异常,就except BaseException

    try-except语句段也有else,和for,while的类型,只有当try语句段中没有异常被检测到时,才会执行else子句。在else范围中的任何代码运行前,try范围中的所有代码必须完全成功(也就是,结束前没有引发异常。)

    finally可以和try配合使用,也可以和try-except配合使用,也可以和try-except-else配合使用
    finally子句是无论异常是否发生,是否捕捉都会执行的一段代码。

    try-finally语句,finally的代码执行完毕之后会继续向上一层引发异常。

    如果finally中的代码引发了另一个异常或者由于return,break,continue语法而终止,原来的异常将丢失而且无法重新引发。

    异常处理语法样式总结

    try:
        try_suite
    except Exception1:
        suite_for_Exception1
    except (Exception2, Exception3, Exception4):
        suite_for_Exception_2_3_and_4
    except Exception5, Argument5:
        suite_for_Exception5_plus_argument
    except (Exception6, Exception7), Argument67:
        suite_for_Exception6_and_7_plus_argument
    except:
        suite_for_all_other_exception
    else:
        no_exceptions_detected_suite
    finally:
        always_execute_sutie
    

    相关文章

      网友评论

          本文标题:[笔记] Python核心编程 第十章

          本文链接:https://www.haomeiwen.com/subject/tpvqfftx.html