1 基本概念
-異常:簡(jiǎn)單來(lái)說(shuō)運(yùn)行期檢測(cè)到的錯(cuò)誤 。
? 異常即是一個(gè)事件,該事件會(huì)在程序執(zhí)行過(guò)程中發(fā)生,影響了程序的正常執(zhí)行。一般情況下,在Python無(wú)法正常處理程序時(shí)就會(huì)發(fā)生一個(gè)異常。
? ?異常是Python對(duì)象,表示一個(gè)錯(cuò)誤。
-異常處理:計(jì)算機(jī)語(yǔ)言針對(duì)可能出現(xiàn)的錯(cuò)誤定義了異常類型,某種錯(cuò)誤引發(fā)對(duì)應(yīng)的異常時(shí),異常處理程序?qū)⒈粏?dòng),從而恢復(fù)程序的正常運(yùn)行。
2 ?異常類型
異常體系內(nèi)部層次關(guān)系

異常總結(jié)



3 異常處理語(yǔ)句
1)try-except
#基本形式

#步驟
?執(zhí)行try子句(在關(guān)鍵字try和關(guān)鍵字except之間的語(yǔ)句)
?如果沒(méi)有異常發(fā)生,忽略except子句,try子句執(zhí)行后結(jié)束。
?如果在執(zhí)行try子句的過(guò)程中發(fā)生了異常,那么try子句余下的部分將被忽略。如果異常的類型和except之后的名稱相符,那么對(duì)應(yīng)的except子句將被執(zhí)行。最后執(zhí)行try語(yǔ)句之后的代碼。
?如果一個(gè)異常沒(méi)有與任何的except匹配,那么這個(gè)異常將會(huì)傳遞給上層的try中。
#注意
一個(gè)try語(yǔ)句可能包含多個(gè)except子句,分別來(lái)處理不同的特定的異常,最多只有一個(gè)分支會(huì)被執(zhí)行。
使用多個(gè)except代碼塊時(shí),必須堅(jiān)持對(duì)其規(guī)范排序,要從最具針對(duì)性的異常到最通用的異常。
一個(gè)?except?子句可以同時(shí)處理多個(gè)異常,這些異常將被放在一個(gè)括號(hào)里成為一個(gè)元組
#example


2)try?- except - finally?
#基本形式

#example

3)try-except-else:else語(yǔ)句的存在必須以except語(yǔ)句的存在為前提,在沒(méi)有except語(yǔ)句的try語(yǔ)句中使用else語(yǔ)句,會(huì)引發(fā)語(yǔ)法錯(cuò)誤
#基本形式

#example

4 raise語(yǔ)句
raise語(yǔ)句用于拋出指定異常

*課后習(xí)題
題目:電腦產(chǎn)生一個(gè)零到100之間的隨機(jī)數(shù)字,然后讓用戶來(lái)猜,如果用戶猜的數(shù)字比這個(gè)數(shù)字大,提示太大,否則提示太小,當(dāng)用戶正好猜中電腦會(huì)提示,"恭喜你猜到了這個(gè)數(shù)是......"。在用戶每次猜測(cè)之前程序會(huì)輸出用戶是第幾次猜測(cè),如果用戶輸入的根本不是一個(gè)數(shù)字,程序會(huì)告訴用戶"輸入無(wú)效"。
解答如下
import random
secret = random.randint(1,100) #[1,3]之間的隨機(jī)數(shù)
i = 1
while True:
? ? print('這是第%d次猜測(cè)'%i)
? ? try:
? ? ? ? temp = input("請(qǐng)輸入數(shù)字:")
? ? ? ? guess = int(temp)
? ? except ValueError:
? ? ? ? print('輸入無(wú)效')
? ? else:
? ? ? ? if guess > secret:
? ? ? ? ? ? print("太大了")
? ? ? ? else:
? ? ? ? ? ? if guess == secret:
? ? ? ? ? ? ? ? print("恭喜你猜到了這個(gè)數(shù)是:%d"%secret)
? ? ? ? ? ? ? ? break
? ? ? ? ? ? else:
? ? ? ? ? ? ? ? print("太小了")
? ? ? ? i += 1
print("游戲結(jié)束")