1.判斷是否斷開的預(yù)言
assert 表達(dá)式 , 描述
表達(dá)式為我們的預(yù)期結(jié)果墨缘,當(dāng)表達(dá)式的結(jié)果為False時(shí)锅知,拋出 AssertionError 異常欺殿,如無異常捕獲則結(jié)束程序運(yùn)行。表達(dá)式結(jié)果為True 程序繼續(xù)向下運(yùn)行绊谭。慎用翻擒,尤其是寫測試用例時(shí)介杆,因?yàn)槲覀冞\(yùn)行程序時(shí),如果斷言失敗韭寸,無異常捕獲程序會結(jié)束運(yùn)行春哨。一般用在防御型的編程、運(yùn)行時(shí)檢查程序邏輯恩伺、檢查約定赴背、程序常量、檢查文檔時(shí)
class Circle(object):
? pi = 3.14
? def __init__(self, r):
? ? ? self.r = r
? def area(self):
? ? ? assert self.pi == Circle.pi, 'pi 值被修改'
? ? ? return self.pi * self.r ** 2
circle1 = Circle(2)
#circle1.pi = 5
print(circle1.area())
2.異常都可以是錯(cuò)誤,但是錯(cuò)誤不一定是異常
語法錯(cuò)誤:或者稱之為解析錯(cuò)凰荚,程序無法解析或者編譯
1燃观、語法錯(cuò)誤:代碼不符合解釋器或編譯器的語法,如:print()輸出單詞出錯(cuò)
2便瑟、邏輯錯(cuò)誤:不完成或者不合法的輸入或者計(jì)算機(jī)出問題缆毁,如:死循環(huán)
異常:執(zhí)行過程中出現(xiàn)問題導(dǎo)致程序無法執(zhí)行
1、程序遇到邏輯或者算法問題到涂,如:1/0
2脊框、運(yùn)行過程中計(jì)算機(jī)錯(cuò)誤,如:內(nèi)存不夠或者IO錯(cuò)誤
異常出現(xiàn)的過程:
1践啄、異常產(chǎn)生浇雹,檢查到錯(cuò)誤且解釋器認(rèn)為是異常,拋出異常
2屿讽、異常處理昭灵,截獲異常,忽略或者終止程序處理異常
3.異常
運(yùn)行期檢測到的錯(cuò)誤被稱為異常伐谈,大多數(shù)的異常都不會被程序處理烂完,都以錯(cuò)誤信息的形式展現(xiàn)
4.異常處理 try...except...else...finally...
try...except...else...finally...使用順序,else必須在except后finally前诵棵,finally只能在最后抠蚣;else與 finally可有可無
while True:
? try:
? ? ? i = int(input('接收一個(gè)除數(shù):'))
? ? ? print(2 / i)
? except:
? ? ? print('發(fā)生了異常')
捕獲特定的異常:當(dāng)異常沒有發(fā)生時(shí)才進(jìn)行處理的語句: else 后的語句塊時(shí)當(dāng)異常沒有發(fā)生后才會執(zhí)行
while True:
? try:
? ? ? i = int(input('接收一個(gè)除數(shù):'))
? ? ? print(2 / i)
? except ZeroDivisionError:? # 只捕獲ZeroDivisionError異常
? ? ? print('發(fā)生了ZeroDivisionError異常')
? except (ValueError, KeyboardInterrupt, TypeError):? # 捕獲元組中的異常
? ? ? print('發(fā)生了ValueError或KeyboardInterrupt或TypeError異常')
? except:? # 可以捕獲所有異常
? ? ? print('發(fā)生了未知異常')
? else:
? ? ? print('結(jié)束程序運(yùn)行')
? ? ? break
不管是否發(fā)生異常都進(jìn)行處理的語句
finally 下的語句塊不管有沒有發(fā)生異常都會執(zhí)行
while True:
? try:
? ? ? i = int(input('接收一個(gè)除數(shù):'))
? ? ? print(2 / i)
? except:
? ? ? print('發(fā)生了異常')
? finally:
? ? ? print('執(zhí)行了finally語句塊')
5.拋出異常 raise
使用 raise 語句拋出一個(gè)指定的異常: raise 異常類型(‘異常描述’)
raise NameError('使用一個(gè)還未賦值對象的變量')
raise 唯一的一個(gè)參數(shù)是指定要被拋出的異常,它必須是一個(gè)異常的實(shí)例或者是異常的類(也就是 Exception 的子類)非春。
6.異常類列表
官方文檔https://docs.python.org/3.6/library/exceptions.html#exception-hierarchy
NoSuchElementException,程序告訴沒有這樣的元素缓屠。