Python異常學習筆記

來源:互聯網
上載者:User
異常(exceptions)是Python中一種非常重要的類型,它和語法錯誤不同,是在程式運行期間引發的錯誤。Python中內建了很多異常,如IOError,NameError,KeyboardInterrupt等,更多的異常可以點擊這裡。

異常的意義在於提供一種更加優雅的運行方式,例如用Python編寫一個計算機,如果使用者輸入不能計算的對象,則可以拋出異常,並進行處理, 如下:

while True:  try:    x= int(input('Please In enter A number:'))    print "Your Input is %s"%x    break  except Exception,e:    print e

Python是一門物件導向的語言,異常本身也是對象, 用dir(Exception)查看Exception類的屬性,如下:[‘__class__', ‘__delattr__', ‘__dict__', ‘__doc__', ‘__format__', ‘__getattribute__', ‘__getitem__', ‘__getslice__', ‘__hash__', ‘__init__', ‘__new__', ‘__reduce__', ‘__reduce_ex__', ‘__repr__', ‘__setattr__', ‘__setstate__', ‘__sizeof__','__str__', ‘__subclasshook__', ‘__unicode__', ‘args', ‘message'], 除開args和message外,其餘的均為其內部屬性, 其中args是傳遞給異常類的建構函式的一個類型為元祖的參數, 一些內建函數,如IOError需要它接收多個參數,其它的則直接是直接傳遞一個錯誤提示字串。

Python的異常可以通過try語句來檢查,任何在try語句塊裡的代碼都會被監測,檢查有無異常產生,except會根據輸入檢查異常的類型,並執行except內的代碼。那麼,這裡就不禁要問問,except後面的兩個參數到底是什嗎?如果第一個是錯誤的類型,那麼第二參數呢?對其進行檢測,發現它是屬於Exception的執行個體,也就是說,它是由異常類產生的一個具體的異常對象。
那麼,使用者如果自訂一個異常呢?Python中規定,所有異常必須直接或者間接的繼承自Exception類,如下,自訂的異常:

#!/usr/bin/env pythonclass MyError(Exception):  def __init__(self,*args):    self.value=args[0]  def __str__(self):    return repr(self.value)def showname(*args):  if args:    print args  else:    raise MyError('Error: need 1 arguments at last, 0 Input')

把這個檔案儲存為showname.py,其它模組就可以引入調用showname函數,並對它執行的結果進行檢測:

#!/usr/bin/env pythonimport shownametry:  showname.showname()except showname.MyError,e:  print e

值得注意的幾點是:1, python中用raise拋出異常; 2, 由於所有異常都是繼承自Exception,所以,當不確定異常類型的時候,可以在except後面直接接Exception來捕獲所有異常;3,由於異常的繼承關係,異常內的所有屬性都是可以被重定義的,也可以在自訂的異常上增加屬性。

  • 相關文章

    聯繫我們

    該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

    如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

    A Free Trial That Lets You Build Big!

    Start building with 50+ products and up to 12 months usage for Elastic Compute Service

    • Sales Support

      1 on 1 presale consultation

    • After-Sales Support

      24/7 Technical Support 6 Free Tickets per Quarter Faster Response

    • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.