更新時(shí)間:2021年03月04日10時(shí)24分 來(lái)源:傳智教育 瀏覽次數(shù):
assert語(yǔ)句又稱作斷言,指的是期望用戶滿足指定的條件。當(dāng)用戶定義的約束條件不滿足的時(shí)候,它會(huì)觸發(fā)AsserionError異常,所以assert語(yǔ)句可以當(dāng)作條件式的raise語(yǔ)句。
assert語(yǔ)句的格式為:
assert 邏輯表達(dá)式, data # dat是可選的
在上述格式中,assert后面緊跟一個(gè)邏輯表達(dá)式,相當(dāng)于條件。data通常是一個(gè)字符串;當(dāng)表達(dá)式的結(jié)果為False時(shí),作為異常類型的描述信息使用。邏輯上等同于:
if not 邏輯表達(dá)式: raise AssertionError(data) 斷言的示例如下: a = 0 assert a!=0, "a 的值不能為0"
上述示例中,定義了變量a的值為0,然后使用assert斷言a的值不等于0,所以程序出現(xiàn)
如下錯(cuò)誤信息:
Traceback (most recent call last): File "C:\Users\itcast\PycharmProjects\bili_new\test.py", line 2, inassert a!=0, "a 的值不能為0" AssertionError: a 的值不能為0
assert語(yǔ)句用來(lái)收集用戶定義的約束條件,而不是捕捉內(nèi)在的程序設(shè)計(jì)錯(cuò)誤,因?yàn)镻ython
會(huì)自行收集程序的設(shè)計(jì)錯(cuò)誤,會(huì)在遇見(jiàn)錯(cuò)誤時(shí)自動(dòng)引發(fā)異常。
下面通過(guò)一個(gè)案例來(lái)介紹:
while True: try: x = int(input('請(qǐng)輸入第一個(gè)數(shù):')) y = int(input('請(qǐng)輸入第二數(shù)')) assert x > 1 and y >1, "a和b的值必須大于1" # 斷言 a = x b = y if a < b: a, b = b, a # a與b的值互換 while b!=0: # 使用輾轉(zhuǎn)相除法求最大公約數(shù) temp = a % b a = b b = temp else: print('%s和%s的最大公約數(shù)為:%s' % (x, y, a)) break except Exception as result: print('捕捉到異常:\n', result)
在上面案例中,整個(gè)程序位于while循環(huán)內(nèi)部,循環(huán)中有個(gè)try-except異常處理語(yǔ)句。在try里面,第3~4行從鍵盤(pán)獲取了int類型的兩個(gè)數(shù)值x和y ,第5行斷言x和y的值必須都大于1,第6~7行分別把x和y的值賦值給a和b,第8~9行使用if語(yǔ)句判斷,如果a比b的小,就互換a和b的值。
第10~16行使用while-else執(zhí)行循環(huán)。如果b不等于0,就使用輾轉(zhuǎn)相除法求最大公約數(shù);如果是其他情況,就直接輸出最大公約數(shù)的值,并使用break終止循環(huán)。
在except中使用Exception捕捉所有的異常,并獲取異常對(duì)應(yīng)的描述信息。
運(yùn)行程序,在控制臺(tái)輸入第1個(gè)數(shù)為1,第2個(gè)數(shù)為5,具體結(jié)果如下圖所示。
在控制臺(tái)再次輸入第1個(gè)數(shù)為15,第2個(gè)數(shù)為55,具體結(jié)果如下圖所示。
猜你喜歡:
北京校區(qū)