'''
異常:錯誤發生的訊號,程式隨之終止
三個部分:
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 異常 程式開發時,很難將所有的特殊情況都處理的面面俱到,通過異常捕獲可以針對突發事件做集中的處理,從而保...