python中異常語句 python 異常

2021-10-11 16:40:42 字數 4527 閱讀 9087

導航:

python的異常分為兩種,1)、語法錯誤,在python直譯器的語法檢測中不通過不能執行**    2)、異常,python程式執行期檢測到的錯誤被稱為異常。在沒有做異常處理時,將終止程式並提示異常資訊,如:①字串轉換為數字時的型別轉換異常,②檔案讀取時的檔案不存在異常,③網路鏈結時主機不可達異常···等。當python指令碼發生異常時我們需要捕獲處理它,否則程式會終止執行。畢竟誰也不希望用著的程式突然的就崩了

1、語法錯誤

python的語法錯誤是很多初學者經常遇到的乙個問題,這類錯誤比較低階,只要多敲幾遍**就可以減少這樣的錯誤

1 >>> iftrur2 file "", line 1

3 iftrur4 ^

5 syntaxerror: invalid syntax6 >>> print("as"))7 file "", line 1

8 print("as"))9 ^

10 syntaxerror: invalid syntax

如:出現這樣的錯誤就是語法錯誤,第1行結尾if語句缺少 ":",第6行結尾多了 ")"

2、異常

1)執行期檢測到的錯誤被稱為異常,python的語法檢測無法檢查這樣的錯誤。

1 >>> int("aa")2 traceback (most recent call last):3 file "", line 1, in

4 valueerror: invalid literal for int() with base 10: 'aa'

5 >>> f = open("aaa.txt","r")6 traceback (most recent call last):7 file "", line 1, in

8 filenotfounderror: [errno 2] no such file or directory: 'aaa.txt'

其中第1行,第5行都是出現異常的地方,看一下異常的輸出資訊,如下圖

2)python的標準異常類

baseexception 為所有異常的基類,exception 為常規錯誤的基類

3、異常處理

為了提高程式的健壯性,不讓程式出現異常時出現崩潰的情況,在必要時需要進行異常處理

1)try-except:語句

①、最簡單的異常處理語句如下,當try的語句塊中有異常出現時,下邊的的語句將不再執行(第3行),異常被except捕獲,執行except中的語句塊後繼續向下執行程式(如第6行)。注:except後邊不跟異常的型別,預設捕捉所有的異常

1 try:2 int("aaa")3 print("---aaa---")4 except:5 print("出現異常-->英文本母不能轉換為數字")6 print("----------")7

9 #輸出結果

10 出現異常-->英文本母不能轉換為數字11 ----------

②、多分支異常,當我們需要捕獲不同的異常時可以用多個except來實現,需要獲取異常的資訊可通過as 變數名得到異常的物件,如第7行

1 try:2 nu = int("100")3 print("轉換後的值nu:", nu)4 i = 1 /05 exceptvalueerror:6 print("出現異常-->英文本母不能轉換為數字")7 except zerodivisionerror as e: #通過 as 變數名 獲取異常的物件

8 print("出現異常-->除數不能為零")9 print("異常的提示資訊-->", e)10 except:11 pass

12 print("----------")13

15 #輸出結果

16 轉換後的值nu: 100

17 出現異常-->除數不能為零18 異常的提示資訊-->division by zero19 ----------

③、當我們需要將多個異常按相同的處理方式可以使用  except (valueerror, [zerodivisionerror [, nameerror]]):

1 try:2 i = 1 /03 nu = int("aa")4 except(valueerror, zerodivisionerror) as e:5 print(e)6 except:7 pass

8 print("----------")9

11 #輸出結果

12 division by zero13 ----------

2)try-except-else-finally 語句

①、當try-except-else-finally**現了finally語句,不管是否出現異常finally語句塊中的語句一定會執行,而else中的語句只有不出現異常是才會執行

出現異常時try-except-else-finally如下

1 try:2 i = 1 /03 print("沒有出現異常i值", i)4 exceptexception as e:5 print("出現異常-->", e)6 else:7 print("沒有出現異常-->執行else")8 finally:9 print("不管是否出現異常,這裡的語句一定會被執行")10

12 #輸出結果

13 出現異常-->division by zero14 不管是否出現異常,這裡的語句一定會被執行

沒有出現異常時try-except-else-finally如下

1 try:2 i = 1 / 1

3 print("沒有出現異常i值", i)4 exceptexception as e:5 print("出現異常-->", e)6 else:7 print("沒有出現異常-->執行else")8 finally:9 print("不管是否出現異常,這裡的語句一定會被執行")10

12 #輸出結果

13 沒有出現異常i值 1.0

14 沒有出現異常-->執行else15 不管是否出現異常,這裡的語句一定會被執行

②、try-except-else-finally還可以拆開使用,有三種形式 1)try-except-finally   2)try-except-else    3)try-finally。  這裡就不展示**了

4、異常的傳遞

在發生異常的語句中沒有處理異常的語句,異常將向上層傳遞,直到遇到處理異常的語句,或python直譯器終止程式

1 deftest2():2 int("aa")3

4 deftest1():5 test2()6

7 try:8 test1()9 exceptexception as e:10 print(e)11 print("-----------")12

14 #輸出結果

15 invalid literal for int() with base 10: 'aa'

16 -----------

如上test2中第2行出現異常,將向第5行呼叫test2的語句處傳遞,這裡依舊沒有異常處理語句,將繼續往上層傳遞到第8行處被except捕獲

5、丟擲異常 raise

1)丟擲python已定義的異常

通過raise 異常型別即可丟擲乙個異常,丟擲的異常也會被except捕獲到。如下邊第4行

1 age = 500

2 try:3 if age < 0 or age > 200:4 raise valueerror("age範圍0-200")5 print("age", age)6 exceptvalueerror as e:7 print("出現異常-->", e)8

10 #輸出結果

11 出現異常--> age範圍0-200

2)拋出自定義異常

拋出自定義異常首先得有個自定義的異常類,注:自定義的異常必須直接或間接的繼承exception基類

1 class myexception(exception): #自定義異常類

2 def __init__(self, msg):3 self.msg =msg4

6 age = 500

7 try:8 if age < 0 or age > 200:9 raise myexception("age範圍0-200") #拋出自定義異常

10 print("age", age)11 exceptmyexception as e:12 print("出現異常-->", e)13

15 #輸出結果

16 出現異常--> age範圍0-200

當然自定義異常類也可以擁有許多的功能,就得看需求新增啦

6、在異常處理中丟擲異常

有某需求:當捕獲到異常時處理完後想繼續丟擲異常.....

在except中用raise可以丟擲當前異常

1 try:2 i = 1 / 0 #異常的語句

3 exceptexception as e:4 print("出現異常-->", e)5 raise #處理完後繼續丟擲異常,raise表示丟擲當前異常

6 print("-------------")7

9 #輸出結果

10 出現異常-->division by zero11 traceback (most recent call last):12 file "", line 2, in

13 i = 1 /014 zerodivisionerror: division by zero

注:異常處理盡量在需要的時候再使用,使用太多會影響**的可讀性

python中異常處理的語句

try except else finally 普通的異常處理 import time try 如果你覺得 可能出現問題,那麼放在try語句中,只執行一次 print s print hello except nameerror as e 對於異常進行乙個重新命名 記錄了異常的詳細資訊 可能執行一次...

python 異常處理語句

異常處理 2 try 3 try 4 num input 請輸入兩個數字以空格隔開!5 num num.split 6 print num 7 print sum num 8 except valueerror 9 print 程式執行 現了type的錯誤!10 else 11 print 如果沒報...

python 異常try except語句

異常模式的寫法 try 執行正常的模組 except x 執行異常x的 except 其他的異常執行模組except 必須在except x之後 else 沒有異常,則會執行完try,而後執行這裡,else必須在有except情況下才可以有 finally 不論有無異常,這一模組都會進入 如果對於處...