python異常處理

來源:互聯網
上載者:User

標籤:有一個   val   bsp   rod   code   運行   序列   錯誤   pytho   

一、異常處理

在程式運行過程中,總會遇到各種各樣的錯誤。程式一出錯就停止運行了,那我們不能讓程式停止運行吧,這時候就需要捕捉異常了,通過捕捉到的異常,我們再去做對應的處理。

下面我們先寫一個函數,實現除法運算。

 
1234567891011 def calc(a,b):     return a/b print(calc(5,1))#調用,沒有錯誤,結果是5.0 >>> 5.0 print(calc(5,0))#再次調用,這時候就不對了,因為被除數不能為0,下面報了一堆錯,程式停止運行了 >>> ZeroDivisionError: division by zero

這個時候我們就需要捕捉異常了,如果除數是0的話,就提示使用者傳入的參數不對,重新傳入。

捕捉異常使用try....except....關鍵字,就是你在寫代碼的時候,先要考慮到這段代碼可能會出現什麼樣的錯誤,然後做對應的處理,try裡面就是包含你做處理的代碼,except裡面就是出了某種錯誤的時候,我怎麼去處理,下面我們改下代碼,捕捉異常。

 
12345678910111213 def calc(a,b): try: res = a/b except ZeroDivisionError as e:#如果是除數為0的錯誤,就返回除數不能為0,這個as e代表把返回錯誤的資訊賦給e return ‘除數不能為0!‘ return res#這個是如果沒有這個異常的話,就返回結果 print(calc(5,0))#這樣再調用就不會出來錯誤了,就返回除數不能為0這個了。

上面就是捕捉異常,當然上面的只能捕捉到除數為0的錯誤,如果有別的錯誤就捕捉不到了;還有一個finally的用法,就是不管出不出異常都執行;try還有一個可以捕捉所有異常,還有else的用法,就是沒出異常的時候怎麼辦,下面用代碼來解釋。

 
123456789101112131415161718192021 def calc(a, b):    try:  # 捕捉異常        res = a / b    except ZeroDivisionError as e:        return ‘除數不能為0!‘    except KeyError as e:  # 捕捉KeyError這個異常,當然這段代碼沒用到字典,所以不會有keyerror這個錯誤,我只是舉個例子        return ‘keyerror錯誤‘    except Exception as e:  # 這個是捕捉所有的異常,不管你有什麼異常都可以捕捉到        print(‘其他異常‘)        return e  #返回錯誤資訊    else:  #這個else和上面的try對應的,也就是不出異常的話走這裡        print(‘沒有出異常‘)        return res    finally:  #這個finally是不管這個段代碼有沒有出異常都走它        print(‘出沒出異常都走我這裡‘) print(calc(5, 0))  #出除數異常了,會返回除數不能為0!和執行finally裡面的代碼 print(calc(5, 1))  #這個沒有出異常,就會走else裡面的東西,返回結果,也會執行執行finally裡面的代碼 print(calc(5, ‘s‘))  #這個也走異常了,除數是字串,肯定不能除,就走那個捕捉所有異常的代碼了,也會執行執行finally裡面的代碼

二、常見的一些異常資訊:

 
1234567891011121314151617181920212223 AttributeError: 試圖訪問一個對象沒有的屬性,比如foo.x,但是foo沒有屬性x IOError:輸入/輸出異常,一般是無法開啟檔案 ImportError: 無法匯入模組或包,一般是路徑問題或名稱錯誤 IndentationError:代碼沒有正確對齊,屬於語法錯誤 IndexError:下標索引超出序列邊界,比如x只有三個元素,卻試圖訪問x[3] KeyError:試圖訪問字典裡不存在的鍵 KeyboardInterrupt:Ctrl+C被按下 NameError:使用一個還未被賦予對象的變數 SyntaxError: 語法錯誤 TypeError: 傳入物件類型與要求的不符 UnboundLocalError:試圖訪問一個還未被設定的局部變數,一般是由於在代碼塊外部還有另一個同名變數 ValueError: 傳入一個調用者不期望的值,即使值的類型是正確的

三、主動拋出異常

主動拋出異常,就是我們在代碼裡面讓它自動拋出一個異常,然後捕捉到,比如說我們在寫自動化測試指令碼的時候,結果和預期不符合,就可以主動拋出一個異常資訊,然後捕捉到,做其他的處理,主動拋出異常使用raise關鍵字。

 
1234567 try:     raise KeyError#主動拋出一個keyerror的異常 except KeyError as e:     print(‘這個是我主動拋出的異常‘)

 

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.