python異常捕獲處理

2022-05-14 08:53:38 字數 2103 閱讀 5307

一、異常處理

在程式執行過程中,總會遇到各種各樣的錯誤。程式一旦出錯就停止執行了,此時就需要捕捉異常,通過捕捉到的異常,我們再去做對應的處理

寫乙個函式,實現除法運算

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裡面就是出了某種錯誤的時候,我怎麼去處理,下面我們改下**,捕捉異常

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的用法,就是沒出異常的時候怎麼辦,下面用**來解釋

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裡面的**

二、常見的一些異常資訊

attributeerror: 試圖訪問乙個物件沒有的屬性,比如foo.x,但是foo沒有屬性x

ioerror:輸入/輸出異常,一般是無法開啟檔案

importerror: 無法匯入模組或包,一般是路徑問題或名稱錯誤

indentationerror:**沒有正確對齊,屬於語法錯誤

indexerror:下標索引超出序列邊界,比如x只有三個元素,卻試圖訪問x[3]

keyerror:試圖訪問字典裡不存在的鍵

keyboardinterrupt:ctrl+c被按下

nameerror:使用乙個還未被賦予物件的變數

syntaxerror: 語法錯誤

typeerror: 傳入物件型別與要求的不符

unboundlocalerror:試圖訪問乙個還未被設定的區域性變數,一般是由於在**塊外部還有另乙個同名變數

valueerror: 傳入乙個呼叫者不期望的值,即使值的型別是正確的

注:本文摘自

python異常捕獲 如何捕獲Python中的異常

python 提供了try except語句捕獲並處理異常,該異常處理語句的基本語法結構如下 try 可能產生異常的 塊 except error1,error2,as e 處理異常的 塊1 except error3,error4,as e 處理異常的 塊2該格式中,括起來的部分可以使用,也可以省...

10 6 捕獲處理異常

異常處理 方式一 捕獲處理 捕獲處理的格式 trycatch 捕獲的異常型別 變數名 public class captureexception public static void div int a,int b catch arithmeticexception e system.out.pri...

異常捕獲處理(2)

異常捕獲機制 bme中定義了乙個抽象異常類bmeexception,它有兩個子類businessbmeexception和generalbmeexception。一般情況下我們丟擲異常的時候採用throw new buisinessbmeexception 100010101 e 其中 100010...