python3 丟擲 捕獲異常

2021-08-26 02:15:58 字數 4660 閱讀 4325

'''

異常:錯誤發生的訊號,程式隨之終止

三個部分:

1.traceback 異常的追蹤資訊(鏈結)

2.異常的型別

3.異常資訊

錯誤兩大類:

1.語法錯誤(執行前進行判定和修正)

2.邏輯錯誤

異常種類:

attributeerror 屬性錯誤

試圖訪問乙個物件沒有的樹形,比如foo.x,但是foo沒有屬性x

ioerror 輸出錯誤

輸入/輸出異常;基本上是無法開啟檔案

importerror 模組匯入錯誤

無法引入模組或包;基本上是路徑問題或名稱錯誤

indentationerror 縮排錯誤

語法錯誤(的子類) ;**沒有正確對齊

indexerror 索引錯誤

下標索引超出序列邊界,比如當x只有三個元素,卻試圖訪問x[5]

keyerror 關鍵字錯誤

試圖訪問字典裡不存在的鍵

keyboardinterrupt 鍵盤中斷錯誤

ctrl+c被按下

nameerror 名稱錯誤

使用乙個還未被賦予物件的變數

syntaxerror 語法錯誤

python**非法,**不能編譯(個人認為這是語法錯誤,寫錯了)

typeerror 型別錯誤

傳入物件型別與要求的不符合

unboundlocalerror 區域性變數錯誤

試圖訪問乙個還未被設定的區域性變數,基本上是由於另有乙個同名的全域性變數,導致你以為正在訪問它

valueerror 值錯誤

傳入乙個呼叫者不期望的值,即使值的型別是正確的

異常處理:

#基本語法為

try:

被檢測的**塊

except 異常型別 as 別名: #別名用來去除異常的值

try中一旦檢測到異常後,執行的**塊。

else:

沒有異常時執行

finally:

無論異常與否,都會執行該模組,通常是進行清理工作

try:

**塊1

**塊2

……except stopiteration:

**塊……

else:

**塊……

finally:

**塊……

斷言:assert 條件語句

如果滿足斷言條件,繼續執行;如果不滿足,丟擲異常(assertionerror)

'''# 1.指定異常捕捉(單分支)

try:

print('*****===>1')

print('*****===>2')

l = [1, 2, 3]

l[100] # indexerror

# 異常**捉,不執行try下後續**塊

print('*****===>3')

d =

d['z'] # keyerror

print('*****===>4')

except indexerror as ie:

print('indexerror',ie)

print('other code')

# 2.異常處理多分支

try:

print('*****===>1')

print('*****===>2')

d =

d['z'] # keyerror

print('*****===>3')

l = [1, 2, 3]

l[100] # indexerror

print('*****===>4')

except indexerror as ie:

print('indexerror',ie)

except keyerror as ke:

print('keyerror',ke)

# 同上

except (indexerror,keyerror) as e:

print('error',e)

print('other code')

# 3.萬能異常 exception:可以匹配任意型別的異常

try:

print('*****===>1')

print('*****===>2')

d =

d['z'] # keyerror

print('*****===>3')

l = [1, 2, 3]

l[100] # indexerror

print('*****===>4')

except exception as e:

print('error',e)

print('other code')

# 4.萬能異常+多分支,實現指定錯誤指定處理。即:萬能異常放最後捕獲

try:

print('*****===>1')

print('*****===>2')

d =

d['z'] # keyerror

print('*****===>3')

l = [1, 2, 3]

l[100] # indexerror

print('*****===>4')

except indexerror as ie:

print('indexerror',ie)

except keyerror as ke:

print('keyerror',ke)

except exception as e:

print('error',e)

print('other code')

# 5.else和finally的使用和區別

try:

print('*****===>1')

print('*****===>2')

d =

d['z'] # keyerror

print('*****===>3')

l = [1, 2, 3]

l[100] # indexerror

print('*****===>4')

except indexerror as ie:

print('indexerror',ie)

except keyerror as ke:

print('keyerror',ke)

except exception as e:

print('error',e)

else:

print('else')

finally:

print('finally')

print('other code')

# 6.主動丟擲異常

raise typeerror('型別錯誤')

# 7.觸發異常

try:

raise typeerror('型別錯誤')

except exception as e:

print(e)

# 8.自定義異常

class myexception(baseexception):

def __init__(self, msg):

self.msg = msg

def __str__(self):

return self.msg

try:

raise myexception('型別錯誤')

except myexception as me:

print(me)

# 斷言:assert 條件語句

# 如果滿足斷言條件,繼續執行;如果不滿足,丟擲異常(assertionerror)

print('1111')

l = [1,2,3,]

assert len(l)>5

print('22222222')

# 捕獲異常

class people:

def __init__(self,name,age):

self.__name = name

self.__age = age

def get_inte***ce(self):

print(self.__name,self.__age)

def set_inter(self,name,age):

try:

if not isinstance(name,str):

raise typeerror('名字必須是str型別')

if not isinstance(age,int):

raise typeerror('年齡必須是int型別')

except typeerror as te:

print(te)

return te

self.__name = name

self.__age = age

p1 = people(100,100)

p1.get_inte***ce()

p1.set_inter(110,101)

p1.get_inte***ce()

p1.set_inter('name1','age1')

p1.get_inte***ce()

p1.set_inter('name2',19)

p1.get_inte***ce()

Python3 異常捕獲

try.except.用於異常捕獲,當一段 程式執行時出現異常 報錯 會導致整個程式結束,出現異常的地方之後的邏輯 就不會被執行了,所以需要捕獲異常,當捕獲到異常之後,可以對異常進行處理,處理完成之後,可以保證專案中的其他 不會受影響 exception 所有錯誤型別的基類 1.indexerror...

python3 異常捕獲

coding utf 8 try.except.用於異常捕獲,當一段 程式執行時出現異常 報錯 會導致整個程式結束,出現異常的地方之後的邏輯 就不會執行了,所以需要捕獲異常,當捕獲到異常之後,可以對異常進行處理,處理完成之後,可以保證專案中的其他 不會受影響 list1 1,2 try s list...

python異常(概念 捕獲 傳遞 丟擲)

01.異常的概念 程式在執行時,如果python 直譯器遇到到乙個錯誤,會停止程式的執行,並且提示一些錯誤資訊,這就是異常 程式停止執行並且提示錯誤資訊這個動作,我們通常稱之為 丟擲 raise 異常 程式開發時,很難將所有的特殊情況都處理的面面俱到,通過異常捕獲可以針對突發事件做集中的處理,從而保...