目錄:
一、什麼是異常?
二、異常的總結
三、課時32課後習題及答案
*******************
一、什麼是異常?
*******************
程式出現邏輯錯誤或者使用者輸入不合法都會引起異常,但這些異常並不是致命的,不會導致程式崩潰死掉。可以利用Python提供的異常處理機制,在異常出現的時候及時捕獲,並從內部消化掉。
那麼什麼是異常呢?舉個例子:
file_name = input("請輸入要開啟的檔名:") f = open(file_name,'r') print("檔案的內容是:") for each_line in f: print(each_line)
這裡當然假設使用者輸入的是正確的,但只要使用者輸入一個不存在的檔名,那麼上面的程式碼就不堪一擊:
請輸入要開啟的檔名:我為什麼是一個文件.txt Traceback (most recent call last): File "C:\Users\14158\Desktop\lalallalalal.py", line 2, in <module> f = open(file_name,'r') FileNotFoundError: [Errno 2] No such file or directory: '我為什麼是一個文件.txt'
上面的例子就丟擲了一個FileNotFoundError的異常,那麼Python通常還可以丟擲哪些異常呢?這裡給大家做總結,今後遇到這些異常就不會陌生了。
******************
二、異常的總結
******************
1、AssertionError:斷言語句(assert)失敗
大家還記得斷言語句吧?在關於分支和迴圈的章節裡講過。當assert這個關鍵字後邊的條件為假的時候,程式將停止並丟擲AssertionError異常。assert語句一般是在測試程式的時候用於在程式碼中置入檢查點:
>>> my_list = ["小甲魚"] >>> assert len(my_list) > 0 >>> my_list.pop() '小甲魚' >>> assert len(my_list) > 0 Traceback (most recent call last): File "<pyshell#3>", line 1, in <module> assert len(my_list) > 0 AssertionError
2、AttributeError:嘗試訪問未知的物件屬性
>>> my_list = [] >>> my_list.fishc Traceback (most recent call last): File "<pyshell#5>", line 1, in <module> my_list.fishc AttributeError: 'list' object has no attribute 'fishc'
3、IndexError:索引超出序列的範圍
>>> my_list = [1,2,3] >>> my_list[3] Traceback (most recent call last): File "<pyshell#7>", line 1, in <module> my_list[3] IndexError: list index out of range
4、KeyError:字典中查詢一個不存在的關鍵字
>>> my_dict = {"one":1,"two":2,"three":3} >>> my_dict["one"] 1 >>> my_dict["four"] Traceback (most recent call last): File "<pyshell#12>", line 1, in <module> my_dict["four"] KeyError: 'four'
5、NameError:嘗試訪問一個不存在的變數
當嘗試訪問一個不存在的變數時,Python會丟擲NameError異常:
>>> fishc Traceback (most recent call last): File "<pyshell#13>", line 1, in <module> fishc NameError: name 'fishc' is not defined
6、OSError:作業系統產生的異常
OSError顧名思義就是作業系統產生的異常,像開啟一個不存在的檔案會引發FileNotFoundError,而這個FileNotFoundError就是OSError的子類。例子上面已經演示過,這裡就不重複了。
7、SyntaxError:Python語法錯誤
如果遇到SyntaxError是Python語法的錯誤,這時Python的程式碼並不能繼續執行,你應該先找到並改正錯誤:
>>> print "I love fishc.com" SyntaxError: Missing parentheses in call to 'print'. Did you mean print("I love fishc.com")?
8、TypeError:不同型別間的無效操作
有些型別不同是不能相互進行計算的,否則會丟擲TypeError異常:
>>> 1 + "1" Traceback (most recent call last): File "<pyshell#14>", line 1, in <module> 1 + "1" TypeError: unsupported operand type(s) for +: 'int' and 'str'
9、ZeroDivisionError:除數為零
地球人都知道除數不能為零,所以除以零就會引發ZeroDivisionError異常:
>>> 5/0 Traceback (most recent call last): File "<pyshell#15>", line 1, in <module> 5/0 ZeroDivisionError: division by zero
我們知道了這些異常,那如何捕獲這些異常呢?
捕獲異常可以用try語句實現,任何出現在try語句範圍內的異常都會被及時捕獲到。try語句有兩種實現形式:一種是 try-except,另一種是try-finally。
*******************************
三、課時32課後習題及答案
*******************************