try關鍵字,定義獲取程序錯誤
except關鍵字,出現異常錯誤執行里面的代碼
Exception定義錯誤類,Exception能獲取到所有類型的錯誤錯誤,as創建錯誤對象名稱,自動獲取錯誤信息
#!/usr/bin/env python # -*- coding:utf8 -*- """獲取程序錯誤信息""" try: #try關鍵字定義獲取程序錯誤 #代碼塊 a = str(字符串) print(a) except Exception as e: #except關鍵字出現異常錯誤執行里面的代碼,Exception定義錯誤類,as創建錯誤對象自動獲取錯誤信息 print(e) #打印錯誤對象輸出錯誤信息 # 輸出 # name '字符串' is not defined
python中的異常種類非常多,每個異常專門用於處理獲取某一項異常
常見錯誤類型
AttributeError 試圖訪問一個對象沒有的樹形,比如foo.x,但是foo沒有屬性x IOError 輸入/輸出異常;基本上是無法打開文件 ImportError 無法引入模塊或包;基本上是路徑問題或名稱錯誤 IndentationError 語法錯誤(的子類) ;代碼沒有正確對齊 IndexError 下標索引超出序列邊界,比如當x只有三個元素,卻試圖訪問x[5] KeyError 試圖訪問字典里不存在的鍵 KeyboardInterrupt Ctrl+C被按下 NameError 使用一個還未被賦予對象的變量 SyntaxError Python代碼非法,代碼不能編譯(個人認為這是語法錯誤,寫錯了) TypeError 傳入對象類型與要求的不符合 UnboundLocalError 試圖訪問一個還未被設置的局部變量,基本上是由於另有一個同名的全局變量, 導致你以為正在訪問它 ValueError 傳入一個調用者不期望的值,即使值的類型是正確的
我們在以后記錄錯誤時,要想記錄對應的錯誤信息可以用以下辦法
先用對應的錯誤類型來獲取,如果都不是前面對應的錯誤類型,最后用Exception來獲取
#!/usr/bin/env python # -*- coding:utf8 -*- """獲取程序錯誤信息""" try: a = str(字符串) print(a) except AttributeError as c: #出現對應錯誤就獲取到信息,打印出來,如果不是對應錯誤則不執行 print(c) except IOError as d: #出現對應錯誤就獲取到信息,打印出來,如果不是對應錯誤則不執行 print(d) except ImportError as e: #出現對應錯誤就獲取到信息,打印出來,如果不是對應錯誤則不執行 print(e) except Exception as f: #都不是上面對應的錯誤,用Exception來不管是上面錯誤都獲取到 print(f) # 輸出 # name '字符串' is not defined
else主代碼塊執行完,執行該塊
finally無論異常與否,最終執行該塊
#!/usr/bin/env python # -*- coding:utf8 -*- try: #主代碼塊 a = str(hjhb) except Exception as e: #代碼錯誤執行模塊 print(e) else: print("主代碼塊執行完,執行該塊") finally: print("無論異常與否,最終執行該塊")
主動觸發異常,也就是沒有錯誤,主動觸發一個錯誤
raise關鍵字,主動觸發一個錯誤
#!/usr/bin/env python # -*- coding:utf8 -*- try: #主代碼塊 a = str("1234") raise Exception('錯誤了。。。') except Exception as e: #代碼錯誤執行模塊 print(e) # 輸出 # 錯誤了。。。