zoukankan      html  css  js  c++  java
  • python错误和异常(1)

    1  SyntaxError: Python解释器语法错误,是唯一不是在运行时发生的异常。

    2 检测和处理异常

    try语句有两种主要形式:try-except 和 try-finally. 只能二选一。

    一个try语句可以对应一个或多个except子句,但只能对应一个finally子句。

    try语句块中异常发生点后的剩余语句永远不会到达。

    except后面相当于一个处理器,处理异常发生时应该怎么做。


    异常或错误的处理流程:当一个异常被引发,剩余代码将会忽略,解释器搜索处理器,如果没有合适的处理器,那么异常就向上移交给调用者去处理,这意味着堆栈框架立即回到之前的那个,如果在上层调用者也没有找到对应的处理器,该异常会继续被向上提交,直到找到合适的处理器,如果到达最顶层仍然没有找到对应处理器,那么就认为这个异常是未处理的,python解释器会显示出跟踪返回消息,然后退出。


    try-except语句可以连贯使用,这样可以处理多种异常。

    def safe_float(obj):
        try:
            retval = float(obj)
        except ValueError:
            retval = 'could not convert non-number to float'
        except TypeError:
            retval = 'object type cannot be converted to float'
        return retval

    这样,safe_float()函数就可以分别处理ValueError和TypeError两种异常了。


    python2.5以后,对于keyboardInterrupt和SystemExit两个异常(not real error),从Exception里移出,和Exception平级,这样当使用如下的catch_all代码时,就不比为这两个异常创建额外的处理器。

    try:
        ....
    except Exception, e:
        #handle real errors

    异常参数:异常引发后,它会被传递给异常处理器,作为附加帮助信息,一般包含一个指示错误原因的字符串元组。



    finally子句:finally子句是无论异常是否发生,是否捕捉都会执行的一段代码。

    try:
        A
    except MyException:
        B
    else:
        C
    finally:
        D

    上面这段代码有两种可能的执行顺序:

    • 正常:A-C-D
    • 异常:A-B-D

    try-finally语句:这个语句不是用来捕获异常的。当try的语句块中有异常发生时,会立即跳转到finally语句段,当finally中的所有代码都执行完毕后,会继续向上一层引发异常。

    try语句的嵌套:

    ccfile = None
    try:
        tyr:
            ccfile = open('cardata.txt', 'r')
            txns = ccfile.readlines()
        except IOError:
            log.write('no txns this month
    ')
    finally:
        if ccfile:
            ccfile.close()
    这样写的好处是,当readlines调用失败时,异常处理会去继续执行except中的子句,并且在finally子句中会去尝试关闭文件。


    一个需要注意的地方是:如果finally中的代码引发了另一个异常或由于return, break, continue语法而终止,原来的异常将会丢失而无法重新引发。


    后面会接着讲到 with语句等。

  • 相关阅读:
    Spread for Windows Forms快速入门(11)数据筛选
    Spread for Windows Forms高级主题(7)自定义打印的外观
    Spread for Windows Forms高级主题(6)数据绑定管理
    使用WiX制作具有时间限制的安装包
    Spread for Windows Forms高级主题(2)理解单元格类型
    如何添加ActiveReports 6导出PDF时的安全设置和数字签名
    Spread for Windows Forms快速入门(10)绑定到数据库
    当心那些有歧义的命名
    【翻译】会有Silverlight6吗?
    Spread for Windows Forms快速入门(12)数据分组(Outlook风格)
  • 原文地址:https://www.cnblogs.com/suzhou/p/3638977.html
Copyright © 2011-2022 走看看