【基礎10】【自學筆記】python錯誤異常處理
一、如何丟擲異常?
異常的產生有兩種來源:
-
一種是程式自動丟擲,比如
1/0
會自動丟擲 ZeroDivisionError -
一種是開發者主動丟擲,使用
raise
關鍵字丟擲。
示例:
def demo_func(filename): if not os.path.isfile(filename): raise Exception
二.常見異常總結
1.SynataxError:語法錯誤
解決方法: ①檢視程式碼有沒有紅色波浪線 ②熟悉python基本語法
2.NameError:試圖訪問的變數名不存在
解決方法: ①檢查對應的變數名是否有定義並賦值,是否寫錯了變數名稱
3.IndexError:索引錯誤,使用的所以你不存在,常為索引超出序列範圍
解決方法: ①檢查lis物件索引選擇是否超出了本來的長度
4.KeyError:使用了對映中不存在的關鍵字(鍵)時引發的關鍵字錯誤
解決方法: ①檢查字典裡是否存在這個key值
5.TypeError:型別錯誤,內建操作或是函式應於在錯誤型別的物件時會引發型別錯誤
解決方法: ①檢查清楚資料型別是否有誤
6.ValueError:值錯誤,傳給物件的引數型別不正確,例如給int()函式傳入了字串資料型別
解決方法: ①弄清楚形參的資料型別 ②再傳對應形參的資料型別
7.AttributeError:屬性錯誤,特性引用和賦值失敗時會引發屬性錯誤
解決方法: ①檢查類裡是否存在這個被呼叫的方法 ②一般不能自動匹配出方法的多半有問題
8.IOError:輸入輸出錯誤
解決方法: ①找到程式碼中關於輸入輸出的相關操作 ②檢查檔案路徑和名稱對不對
異常不侷限於以上八中,這只是很常見的八種異常
三、丟擲異常的幾種方式?
1.try...except組合語法
(1)程式碼:
try:
正常的操作
except:
發生異常,執行這塊程式碼
try: f=open("d:\\test.txt","r") f.read() print("檔案讀寫錯誤") except IOError: print("IO讀寫出錯")
2.try...except...else組合語法
(1)程式碼:
try:
正常的操作
except:
發生異常,執行這塊程式碼
else:
如果沒有異常,執行這塊程式碼
try: f=open("d:\\test.txt","r") f.read() print("檔案讀寫錯誤") except IOError: print("IO讀寫出錯") else: print("檔案寫入成功")
3.try...except...except(多個異常處理)
(1)程式碼:
try:
正常的操作
except A:
發生異常A,執行這塊程式碼
except B:
發生異常B,執行這塊程式碼
except:
發生其它異常,執行這塊程式碼
else:
如果沒有異常,執行這塊程式碼
try: f=open("d:\\test.txt","r") f.read() print("檔案讀寫錯誤") except IOError: print("IO讀寫出錯") except: print("其他未知異常") else: print("檔案寫入成功")
4.try...except(A,B)(一次捕獲多個異常)
(1)程式碼:
try:
正常的操作
except(A,B):
發生異常A和B,執行這塊程式碼
try: f=open("d:\\test.txt","r") f.read() print("檔案讀寫錯誤") except (IOError,TypeError): print("讀取檔案時出現異常") else: print("檔案寫入成功")
5、try...except...finally組合語法
(1)程式碼:
try: 程式碼A except [exception] as e: 程式碼B finally: 程式碼C
>>> try: ... 1/0 ... except ZeroDivisionError as e: ... print("發生了異常:錯誤資訊如下: \n" + str(e)) ... finally: ... print("程式執行結束!!") ... 發生了異常:錯誤資訊如下: integer division or modulo by zero 程式執行結束!!
萬能異常處理:-所有的異常都繼承Exception
try: f=open("d:\\test.txt","r") f.read() print("檔案讀寫錯誤") except Exception as e: print("讀取檔案時出現異常") print("e的內容"+str(e)) else: print("檔案寫入成功")