[2015-08-19] python025

try-except-else-finally語句:

語法: 
    try:
        try_suite
    except Exception1:
        suite_exception1
    except (Exception2,Exception3):
        suite23_exception23
    ...
    else:
        else_suite 
    finally:
        finally_suite 

    可以替換爲在try-finally語句中嵌套try-except語句的形式

自定義異常:

raise語句可顯式觸發異常:
    raise [SomeException [,args [,traceback]]]
        SomeException:可選,異常的名字,僅能使用字符串、類或實例
        args:可選,以元組的形式傳遞給異常的參數
        traceback:可選,異常觸發時新生成的一個用於異常-正常化的跟蹤記錄,多用於重新引發異常時

異常對象:

  • Python異常是內置的經典類Exception的子類的實例
    • 爲了向後兼容,Python還允許使用字符串或任何經典類實例
    • Python2.5之後,Exception是從BaseException繼承的新式類
  • Python自身引發的所有異常都是Exception的子類的實例
  • 大多的標準異常都是由StandardError派生的,其有3個抽象的子類:
    • ArithmeticError
      • 由於算術錯誤而引發的異常基類
      • OverflowError, ZeroDivisionError, FloatingPointError
    • LookupError
      • 容器在接收到一個無效鍵或索引時引發的異常的基類
      • IndexError,KeyError
    • EnvironmentError
      • 由於外部原因而導致的異常的基類
      • IOError, OSError, WindowsError

標準異常類:

  • AssertionError
    • 斷言語句失敗
  • AttributeError
    • 屬性引用或賦值失效
  • FloatingPointError
    • 浮點型運算失敗
  • IOError
    • I/O操作失敗
  • ImportError
    • import語句不能找到要導入的模塊,或者不能找到該模塊特別請求的名稱
  • IndentationError
    • 解析器遇到了一個由於錯誤的縮進而引發的語法錯誤
  • IndexError
    • 用來索引序列的整數超出了範圍
  • KeyError
    • 用來索引映射的鍵不在映射中
  • KeyboardInterrupt
    • 用戶按了中斷鍵(Ctrl+c,Ctrl+Break或Delete鍵)
  • MemoryError
    • 運算耗盡內存
  • NameError
    • 引用了一個不存在的變量名
  • NotImplementedError
    • 由抽象基類引發的異常,用於指示一個具體的子類必須覆蓋的一個方法
  • OSError
    • 由模塊os中的函數引發的異常,用來指示平臺相關的錯誤
  • OverflowError
    • 整數運算的結果太大導致溢出
  • SyntaxError
    • 語法錯誤
  • SystemError
    • Python本身或某些擴展模塊中的內部錯誤
  • TypeError
    • 對某對象執行了不支持的操作
  • UnboundLocalError
    • 引用未綁定值的本地變量
  • UnicodeError
    • 在Unicode的字符串之間進行轉換時發生的錯誤
  • ValueError
    • 應用於某個對象的操作或函數,這個對象具有正確的類型,但確有不適當的值
  • WindowsError
    • 模塊os中的函數引發的異常,用來指示與Windows相關的錯誤
  • ZeroDivisionError
    • 除數爲0

自定義異常類:

自定義異常和多重繼承:
    較有效的方法是從自定義異常類和標準異常類進行多重繼承,例如
        class CustomAttributeError(CustomException,AttributeError):
            pass 
標準庫中使用的其他異常:
    Python標準庫中的許多模塊都定義了自己的異常類,如socket中的socket.error
        等同於自定義的異常類

assert語句:

assert語句用於在程序中引入調試代碼
    assert condition[, expression]
        如果condition條件滿足,則assert不做任何操作
        如果condition條件不滿足,則assert使用expression作爲參數實例化AssertionError並引發結果實例
注意:
    如果運行Python時使用了-O優化選項,則assert將是一個空操作:編譯器不爲assert語句生成代碼
    運行Python時不使用-O選項,則__debug__內置變量爲True,否則其值爲False

assert語句相當於下面的代碼:
    if __debug__:
        if not condition:
            raise AssertionError, <expression>
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章