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