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:实际上可以自定义异常,这个需要用到类的知识,以后再说。

  • 相关阅读:
    为何要对URL进行编码
    关于GreenPlum的一些整理
    Greenplum入门——基础知识、安装、常用函数
    PyGreSQL入门,pg模块,pgdb模块
    MySQL Test Suite使用
    MySQL到Greenplum迁移分析
    Method overrides should not change parameter defaults
    Why use a public method in an internal class?
    Git Submodules vs Git Subtrees
    To Allow App through Windows Defender Firewall in Command Prompt
  • 原文地址:https://www.cnblogs.com/87060524test/p/12240012.html
Copyright © 2011-2022 走看看