zoukankan      html  css  js  c++  java
  • 【转】python try语句相关(try/except/else/finally)

    版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
    本文链接:https://blog.csdn.net/m0_37822685/article/details/80259402

    1、try - except

    作用: 捕获程序在执行时遇到的异常情况,即一些报错。什么啥玩意儿没定义啊,符号又错了啊之类的你懂得。

    意义: 因为程序在发现某个错误时,往往会中断不再向下执行,如下例子说明问题:

     

    很明显,我们并没有定义b,  就将它赋值给a, 现在我们运行如下:

     

    不出所料提示NameError, 发现错误就报错,不再执行下面的程序。

    现在我们用try/except写一下:

     

      打印:

     

      我们从这个例子可以试着去推测这段代码的执行过程:

    (1)先执行try代码块, 发现了错误。

    (2)执行except代码块。

    (3)程序向下执行。

    可能有疑问try block发现异常前后正常的的部分会被执行吗,可以测试一下:

     

    打印:

     结论:

    (1)先执行try block, 直到发现了错误,不再执行异常之后的代码。

    (2)执行except block.

    (3)向下继续。

    现在已经对try/excepy有了感性的了解,接下来拓展它的用法:

    简单来说,在try/except语句中,可以用多个except.

    例子:

    这里使用了两个except, 可以发现except 后面跟了SyntaxError, NameError, 这个我们经常见过的两个系统报错,当然这里可以改成任何系统错误(参见python标准异常)。执行:

    可见,当try代码块执行出现异常,在except中匹配到了NameError的异常,则执行了对应except的语句。

    新的疑问,若所有except都没有匹配呢,测试如下:

    我们将NameErro改成了SystemExit,打印:

    发现又回到了开始,说明这样的try/except等于是废的。。。

    所以避免没有匹配到异常,又中断程序,将代码修改如下:

    即又加了一条except, 这条except后面没有加系统错误,打印:

    OK,get it.

    2、try-except-else

    举个例子:

    打印:

    可见,有异常时,else block时不执行的。

    那,无异常时:

       

      打印:

    可见,无异常时else block执行。

    至此可以写出try/except/else的格式

    --------------------------------------------------------------------------------

    try:

        try block

    except ERROR1:

        except ERROR1 block

    except ERRPR2:

        except ERROR2 block

                ......

    except:

        except block

    else:

        else block

    -----------------------------------------------------------------------------

    当然, 这些测试只是看到语句的功能,具体的实现内部原理再说吧, 一开始看那些得把人搞晕。

    3、try-finally

    作用: 无论try语句是否有异常,最后都要执行的代码。

    例子:

     

     

     

    错是有的,先执行完finally block, 然后回到try block报错。

    当然 try, except, else, finally是可以全部组合在一起用的。

     

    PS:实际上可以自定义异常,这个需要用到类的知识,以后再说。

  • 相关阅读:
    ....
    CodeForces 375A(同余)
    POJ 2377 Bad Cowtractors (最小生成树)
    POJ 1258 AgriNet (最小生成树)
    HDU 1016 Prime Ring Problem(全排列)
    HDU 4460 Friend Chains(bfs)
    POJ 2236 Wireless Network(并查集)
    POJ 2100 Graveyard Design(尺取)
    POJ 2110 Mountain Walking(二分/bfs)
    CodeForces 1059B Forgery(模拟)
  • 原文地址:https://www.cnblogs.com/87060524test/p/12240012.html
Copyright © 2011-2022 走看看