1九、異常處理

異常處理

異常以及異常拋出

  • 異常拋出機制,爲程序開發人員提供了一種在運行時發現錯誤,進行恢復處理,而後繼續執行的能力。下面是一個異常處理實例:python

    try:
          f = open('unfile.py', 'r')
      except IOError, e:
          print False,str(e)
    
      False [Errno 2] No such file or directory: 'unfile.py'

拋出機制

  • 若是在運行時發生異常的話,解釋器會查找相應的處理語句(稱爲handler)。
  • 要是在當前函數裏沒有找到的話,它會將異常傳遞給上層的調用函數,看看那裏能不能處理。
  • 若是在最外層(全局「main」)仍是沒有找到的話,解釋器就會退出,同時打印出traceback以便讓用戶找出錯誤產生的緣由。
  • 注意:雖然大多數錯誤會致使異常,但一個異常不必定表明錯誤。有時候它們只是一個警告,有時候它們多是一個終止信號,好比退出循環等。

finally子句

  • python提供try-finally子句來表述這樣的狀況:咱們不關心捕捉到是什麼錯誤,不管錯誤是否是發生,這些代碼「必須」運行,好比文件關閉,釋放鎖,把數據庫鏈接還給鏈接池等。好比:數據庫

    try:
          f = open('unfile.py', 'r')
      except Exception, e:
          print False,str(e)
      finally:
          print "exec finally"

raise拋出異常

  • 到目前爲止,咱們只討論瞭如何捕捉異常,那麼如何拋出異常?
  • 使用raise來拋出一個異常:函數

    if 'a' > 5:
          raise TypeError("Error: 'a' must be integer.")

常見的python異常

異常 描述
AssertionError assert語句失敗
AttributeError 試圖訪問一個對象沒有的屬性
IOError 輸入輸出異常,基本是沒法打開文件
ImportError 沒法引入模塊或者包,基本是路徑問題
IndentationError 語法錯誤,代碼沒有正確的對齊
IndexError 下標索引超出序列邊界
KeyError 試圖訪問你字典裏不存在的鍵
KeyBoardInterrupt Ctrl+C被按下
NameError 使用一個還未賦予對象的變量
SyntaxError python代碼邏輯語法出錯,不能執行
TypeError 傳入的對象類型與要求不符
UnboundLocalError 試圖訪問一個還未設置的全局變量,基本上是因爲另有一個同名的全局變量,致使你覺得在訪問
ValueError 傳入一個不被指望的值,即便類型正確
相關文章
相關標籤/搜索