Python異常處理
1、異常概述
(1)異常:Python用異常對象來表示異常情況,遇到錯誤後,會引發異常,如果異常對象未被處理捕捉,程序就會用所謂的回溯終止執行
(2)異常處理:程序出現bug時不將錯誤信息顯示給用戶,而是現實一個提示的頁面
2、常見python 異常:
(1)AttributeError:試圖訪問一個對象沒有的屬性,比如foo.x,但是foo沒有屬性x
(2)IOError:輸入/輸出異常;基本上是無法打開文件
(3)ImportError:無法引入模塊或包;基本上是路徑問題或名稱錯誤
(4)IndentationError:語法錯誤(的子類) ;代碼沒有正確對齊
(5)IndexError:下標索引超出序列邊界,比如當x只有三個元素,卻試圖訪問x[5]
(6)KeyError:試圖訪問字典裏不存在的鍵
(7)KeyboardInterrupt:Ctrl+C被按下
(8)NameError:使用一個還未被賦予對象的變量
(9)SyntaxError Python代碼非法,代碼不能編譯(個人認爲這是語法錯誤,寫錯了)
(10)TypeError:傳入對象類型與要求的不符合
(11)UnboundLocalError:試圖訪問一個還未被設置的局部變量,基本上是由於另有一個同名的全局變量,導致你以爲正在訪問它
(12)ValueError:傳入一個調用者不期望的值,即使值的類型是正確的
3、 抓取異常
try: name = "dayi123" age = int(name) except Exception as e: #抓取所有的異常,並將異常錯誤信息賦值給e print("error:") print(e)
4、根據異常錯誤抓取異常
#IO錯誤 try: with open('dayi123.txt','r') as f: print(f.read()) except IOError: #文件不存在時會執行下面語句 print("no file ")#下標錯誤 try: name = ["dayi","xiaowang","xiaoli"] name[4] except IndexError as e: #如果訪問列表中的元素不存在,則報下面錯誤 print("下標錯誤")
5、同時抓取多個異常
try: name = ["dayi","xiaowang","xiaoli"] name[2] info_dict = {'name':"dayi",'age':18,'job':"it"} info_dict["mail"] #訪問字典裏不存在的key except (IndexError,KeyError) as e: #同時抓取兩個錯誤 print("下標錯誤或鍵錯誤")
6、分類抓取異常
try: #將要抓的異常程序寫在try下 name = "dayi" name_list = ['xiaochen','eric','jack'] age = int(name) print(name) print(name_list[4]) except NameError as err: #若果異常關鍵字爲NameError,則執行下面內容 print(err) except IndexError as err: #若果異常關鍵字爲IndexError,則執行下面內容 print(err) print('do sth to make up..........') except Exception as e: #抓取所有的異常並將異常信息賦給e print('---->some error i do not know:',e) else: #如果沒有異常,則執行下面內容 print("---no err happend---") finally: #不管有沒有異常,都會執行下面內容 print("---no matter has error or not,this willpart all") print('--do sth else---')
7、製作自己的異常
class DayiError(Exception): def __init__(self, msg): self.message = msg # def __str__(self): # return 'sdfsf' try: raise DayiError('數據庫連不上') except DayiError as e: print(e)