Python異常處理

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)


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章