異常類型的文章鏈接:https://www.cnblogs.com/nmb-musen/p/10856023.html
異常捕獲的語(yǔ)法
1儡炼,try/except語(yǔ)句用來(lái)檢測(cè)try語(yǔ)句塊中的錯(cuò)誤晃酒,從而讓except語(yǔ)句捕獲異常信息并處理
2或辖,一個(gè)try語(yǔ)句可以對(duì)應(yīng)多個(gè)expect語(yǔ)句汉形,但只能對(duì)應(yīng)一個(gè)finally子句矗积,或是一個(gè)try-expect-finally復(fù)合語(yǔ)句
3衡怀,可以使用try-expect語(yǔ)句監(jiān)測(cè)和處理異常够庙,也可以添加一個(gè)可選的else子句處理沒(méi)有監(jiān)測(cè)到異常時(shí)的執(zhí)行代碼
4靠娱,finally 是不管有無(wú)錯(cuò)誤嗽元,都會(huì)執(zhí)行的代碼敛纲。一般用來(lái)做清除工作
常見(jiàn)的錯(cuò)誤類型
1,ValueError:傳入無(wú)效的參數(shù)
2剂癌,ZeroDivisionError :除數(shù)為0(任何一個(gè)數(shù)值被零除都會(huì)引發(fā)此錯(cuò)誤)
3淤翔,ModuleNotFoundError :找不到模塊
4,TypeError : 對(duì)類型無(wú)效的操作
5佩谷,AssertionError : 斷言失敗
6旁壮,NameError :變量未聲明或初始化
7,SyntaxError:python解釋器語(yǔ)法錯(cuò)誤(代碼中有一個(gè)不正確的結(jié)構(gòu)谐檀,改正之前程序無(wú)法運(yùn)行)
8抡谐,IndexError:請(qǐng)求的索引超出范圍
9,KeyError:請(qǐng)求一個(gè)不存在的字典關(guān)鍵字
10桐猬,F(xiàn)ileNotFoundError:輸入/輸出錯(cuò)誤(打開(kāi)文件路徑錯(cuò)誤會(huì)引發(fā)此錯(cuò)誤)
11麦撵,AttributeError:嘗試訪問(wèn)未知的對(duì)象屬性
下面一個(gè)是一個(gè)簡(jiǎn)單的異常處理的例子
num = input("請(qǐng)輸入一個(gè)數(shù)字:")
res = 100 / int(num)
try:
res = 100 / int(num)
except: # try里面的語(yǔ)句報(bào)錯(cuò)了,執(zhí)行except
# 你抓到了異常,你自己額外添加的處理
print("輸入有誤溃肪,請(qǐng)輸入非0的數(shù)字免胃!")
# 你處理完了之后,把錯(cuò)誤又拋出給python解釋器
raise
else: # try里面的語(yǔ)句沒(méi)報(bào)錯(cuò)惫撰,執(zhí)行else
print(res)
finally:
# 不管try里面有沒(méi)有報(bào)錯(cuò)羔沙。最后一定會(huì)執(zhí)行的代碼。
print("我是一定要執(zhí)行的收尾代碼润绎!")
如果知道會(huì)出現(xiàn)哪些錯(cuò)誤,可以針對(duì)不同的錯(cuò)誤做不同的處理
try:
res = 100 / int(num)
except ZeroDivisionError as e: # try里面的語(yǔ)句報(bào)錯(cuò)了
# 你抓到了異常,你自己額外添加的處理
print("輸入有誤莉撇!請(qǐng)輸入非0的數(shù)字呢蛤!")
print(e)
# 你處理完了之后,把錯(cuò)誤又拋出給python解釋器
raise
except ValueError as e:
# 抓到異常棍郎,額外添加的處理其障。這里沒(méi)有 raise 表示不顯示異常
print("輸入有誤!請(qǐng)輸入數(shù)字類型涂佃!")
print(e)
except Exception as e:
print("其它未知錯(cuò)誤")
print(e)