python 異常處理

來源:互聯網
上載者:User

標籤:python 異常處理

異常拋出機制:為程式開發人員提供一種在運行錯誤發現,進行恢複處理,然後繼續執行的能力。


範例:

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


#!/usr/bin/pythontry:                                            #try嘗試執行代碼    open(‘abc.log‘)except IOError,msg:                             #except接受異常,注意異常的名稱要相符,通過變數接受異常資訊    pass                                        #佔位

#執行代碼時沒有任何問題,但這個代碼是打不開的。

                  *msg變數解釋,只是接受錯誤的資訊:

        ....        except IOError,msg:    print msg        執行後代碼後,列印相關錯誤        [Errno 2] No such file or directory: ‘abc.log‘


#如果直接執行:

open(‘abc.log‘)#報錯:Traceback (most recent call last):  File "try.py", line 6, in <module>    open(‘abc.log‘)IOError: [Errno 2] No such file or directory: ‘abc.log‘

異常類型注意:異常類型,並不是直接使用except就可以捕獲異常;

[[email protected] 123]# cat try.py #!/usr/bin/pythontry:    open(‘abc.log‘)except NameError,msg:                                #當修改異常類型為NameError    pass[[email protected] 123]# python try.py Traceback (most recent call last):  File "try.py", line 3, in <module>    open(‘abc.log‘)IOError: [Errno 2] No such file or directory: ‘abc.log‘

#執行後IOError同樣會報錯,except並沒有捕獲NameError 

#如果有多段代碼

[[email protected] 123]# cat try.py #!/usr/bin/pythontry:    open(‘test.log‘)                #此處的test.log檔案是存在的    print hello                     #此處的hello是一個變數,不是字串except IOError,msg:    pass[[email protected] 123]# python try.py Traceback (most recent call last):  File "try.py", line 4, in <module>    print helloNameError: name ‘hello‘ is not defined
  #當執行到hello時,提示未命名;

   言外之意:當程式出現異常時,程式會終止,隨後捕獲異常,如果再次出現異常,也可以再次捕獲

[[email protected] 123]# cat try.py #!/usr/bin/pythontry:    open(‘test.log‘)    print helloexcept IOError,msg:    passexcept NameError,msg:    pass[[email protected] 123]# python try.py
#當再次執行時,異常被掩蓋。

#再次強調異常的捕獲,是根據異常的名稱的定義的!

異常處理:pass 只是掩蓋了異常,並不是無任何其它操作,(例如定義一些異常處理的函數來解決問題)!

範例:

[[email protected] 123]# cat try.py #!/usr/bin/python#coding:utf8filename = raw_input("請輸入要操作的檔案:")try:    open(filename)    print hellpexcept IOError,msg:    print "指定的檔案不存在,請重新輸入"except NameError,msg:    print "內部變數調用錯誤!"[[email protected] 123]# python try.py 請輸入要操作的檔案:test.log內部變數調用錯誤![[email protected] 123]# python try.py 請輸入要操作的檔案:a.log指定的檔案不存在,請重新輸入#處理可能出現問題的程式段,捕獲問題進行相應的處理。

拋出機制:

1、如果在運行時發生異常的話,解譯器會尋找相應的處理語句(稱為handler)

2、要是在當前函數裡沒有找到的話,它會將異常傳遞給上層的調用函數,看看那裡能不能處理。

3、如果在最外層(全域”main“)還是沒有找到的話,解譯器就會退出,同時列印出traceback以便讓使用者找出錯誤產生的原因。

#注意雖然大多數錯誤會導致異常,但一個異常不一定代表錯誤。有時候他們只是一個警告,有時候他們可能是一個終止訊號,比如退出迴圈等。


finally字句:

Python提供try-finally子句,表達:不關心捕捉的錯誤,且錯誤是否發生,這些代碼必須執行,比如檔案的關閉,釋放鎖,把資料庫連結返還給連結池等。

問題:

#!/usr/bin/python#coding:utf8filename = raw_input("請輸入要操作的檔案:")try:    f = open(filename)                                    print hellpexcept IOError,msg:    print "指定的檔案不存在,請重新輸入"except NameError,msg:    print "內部變數調用錯誤!"print "over"f.close()print "that‘s all"[[email protected] 123]# python try.py 請輸入要操作的檔案:123                            #此處f對象是無指定的檔案不存在,請重新輸入overTraceback (most recent call last):  File "try.py", line 12, in <module>    f.close()                                     #執行時出現問題NameError: name ‘f‘ is not defined

範例:

#!/usr/bin/python#coding:utf8filename = raw_input("請輸入要操作的檔案:")try:    f = open(filename)    print hellpexcept IOError,msg:    print "指定的檔案不存在,請重新輸入"except NameError,msg:    print "內部變數調用錯誤!"finally:    print "ok"[[email protected] 123]# python try.py 請輸入要操作的檔案:123指定的檔案不存在,請重新輸入ok#注意finally子句執行

raise拋出異常:

例子:

#!/usr/bin/python#coding:utf8filename = raw_input("請輸入要操作的檔案:")try:    f = open(filename)    print hellpexcept IOError,msg:    print "指定的檔案不存在,請重新輸入"except NameError,msg:    print "內部變數調用錯誤!"finally:    print "ok"if filename == "hello":    raise TypeError("noting!!!")
[[email protected] 123]# python try.py 請輸入要操作的檔案:new.log內部變數調用錯誤!ok[[email protected] 123]# python try.py 請輸入要操作的檔案:hello指定的檔案不存在,請重新輸入okTraceback (most recent call last):  File "try.py", line 14, in <module>    raise TypeError("noting!!!")TypeError: noting!!!#此處拋出異常

注意:異常的類型不可以隨便指定,需python中可以識別、正常處理的異常。

如:

........if filename == "hello":    raise OtherError("noting!!!")執行後:Traceback (most recent call last):  File "try.py", line 14, in <module>    raise OtherError("noting!!!")NameError: name ‘OtherError‘ is not defined

常見的python異常:

650) this.width=650;" src="http://s3.51cto.com/wyfs02/M00/6E/3B/wKiom1V2rviCTu6-AAQU5p8hS-0629.jpg" title="}9MKJK{_3][2_1`W9]A9@(A.jpg " alt="wKiom1V2rviCTu6-AAQU5p8hS-0629.jpg" />




本文出自 “思想大於技術” 部落格,謝絕轉載!

python 異常處理

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.