[python拾遺]異常處理,python拾遺異常處理

來源:互聯網
上載者:User

[python拾遺]異常處理,python拾遺異常處理
異常

異常(Exception)是因為程式的例外、違例、出錯等情況而在正常控制流程以外採取的行為,一般分為如下兩個階段:

 

1.異常發生:一個錯誤發生後被列印出來,稱為未處理異常,而預設的處理則是自動輸出一些調試資訊並終止程式運行。

2.異常處理:通過代碼明確地處理異常,則程式不會終止運行,並增強程式的容錯性。

說白了,異常處理的目的就是為了是程式的可執行性更高,能順利的運行下去;同時不讓使用者看到難堪的錯誤資訊,通俗來說就是不讓使用者看見大黃頁。

可以通過python3中的異常類型(Exception)查看異常。

常見的異常:

AttributeError  #試圖訪問一個對象沒有的樹形,比如foo.x,但是foo沒有屬性xIOError  #輸入/輸出異常;基本上是無法開啟檔案ImportError  #無法引入模組或包;基本上是路徑問題或名稱錯誤IndentationError  #語法錯誤(的子類) ;代碼沒有正確對齊IndexError  #下標索引超出序列邊界,比如當x只有三個元素,卻試圖訪問x[5]KeyError  #試圖訪問字典裡不存在的鍵KeyboardInterrupt  #Ctrl+C被按下NameError  #使用一個還未被賦予對象的變數SyntaxError  #Python代碼非法,代碼不能編譯(個人認為這是語法錯誤,寫錯了)TypeError  #傳入物件類型與要求的不符合UnboundLocalError  #試圖訪問一個還未被設定的局部變數,基本上是由於另有一個同名的全域變數,導致你以為正在訪問它ValueError #傳入一個調用者不期望的值,即使值的類型是正確的

更多的異常:

ArithmeticErrorAssertionErrorAttributeErrorBaseExceptionBufferErrorBytesWarningDeprecationWarningEnvironmentErrorEOFErrorExceptionFloatingPointErrorFutureWarningGeneratorExitImportErrorImportWarningIndentationErrorIndexErrorIOErrorKeyboardInterruptKeyErrorLookupErrorMemoryErrorNameErrorNotImplementedErrorOSErrorOverflowErrorPendingDeprecationWarningReferenceErrorRuntimeErrorRuntimeWarningStandardErrorStopIterationSyntaxErrorSyntaxWarningSystemErrorSystemExitTabErrorTypeErrorUnboundLocalErrorUnicodeDecodeErrorUnicodeEncodeErrorUnicodeErrorUnicodeTranslateErrorUnicodeWarningUserWarningValueErrorWarningZeroDivisionError
異常處理

python3中提供try語句處理異常,格式為:

try:    print('#先運行別指定的代碼')except Exception as e:  #所有的異常都繼承至Exception類,可以捕獲任意異常    print(e)  #可以擷取異常e    print('#如果發生了異常,執行異常處理')else:    print('#如果主代碼塊沒有異常發生並執行完後,則繼續往下執行')

或者:

try:    print('#先運行特定的代碼')except Exception as e:    print('#捕獲對應的異常並處理之')finally:    print('#不管異常與否,最終都會執行')

當然try語句也可以捕獲特定的異常,而非指定異常則無法處理。具體可以看下面幾個例子:

dic = ["English", 'Chinese']try:    dic[10]except IndexError as e:    print(e)
s1 = 'hello'try:    int(s1)except ValueError as e:    print(e)

而當遇到非指定異常,則會報錯

# 未捕獲到異常,程式直接報錯s1 = 'hello'try:    int(s1)except IndexError as e:    print(e)

當要處理多個異常時也可以這樣寫

except ( AttributeError,NameError ) as e:    print(e)    print('#這是捕獲多個類型異常的文法')

雖然Exception可以捕獲任意異常,但對於特殊處理或提醒的異常需要先定義,最後定義Exception來確保程式正常運行。所以下面這種寫法也很常用:

s1 = 'hello'try:    int(s1)except KeyError as e:    print('鍵錯誤')except IndexError as e:    print('索引錯誤')except Exception as e:    print('錯誤')

raise語句主動觸發異常,python3中可以利用raise語句拋出一個通用異常類型(Exception),具體如下:

try:    raise Exception('錯誤了...') #這是主動引發一個異常except Exception as e:    print(e)

python3中也可以通過建立繼承至通用異常類型(Exception)的類,來自訂異常:

#關於raise語句,還有:class Myerror(Exception):    def __init__(self,msg):        self.msg = msg    def __str__(self):  # 以字串格式輸出        return self.msgtry:    raise Myerror('錯誤')except Exception as f:    print(f)

異常處理中還可以使用with語句來簡化代碼,常用於檔案處理之中,具體樣本見[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.