1.什么是異常
異常:,運(yùn)行過(guò)程中,報(bào)錯(cuò),不正常的情況
不正常的情況,在程序中,會(huì)有兩種體現(xiàn)
第一個(gè):自己造孽,寫錯(cuò)代碼了!那還能怨誰(shuí),錯(cuò)誤也是一種異常;這樣的話程序都運(yùn)行不起來(lái)!
第二個(gè):程序運(yùn)行過(guò)程中,在某些特定條件下,不合適的數(shù)據(jù)引起程序出現(xiàn)錯(cuò)誤導(dǎo)致程序崩潰
??? 例如要求用戶輸入一個(gè)數(shù)字,但是用戶誤操作輸入了字符串,在進(jìn)行類型轉(zhuǎn)換時(shí)就會(huì)出現(xiàn)錯(cuò)誤導(dǎo)致程序崩潰!
為什么要處理異常:
??? 當(dāng)程序在運(yùn)行過(guò)程中,由于用戶的誤操作或者不合適的數(shù)據(jù)引發(fā)的程序錯(cuò)誤,讓代碼自己處理并保證程序的正常執(zhí)行。而不至于因?yàn)殄e(cuò)誤導(dǎo)致程序崩潰!
??? 提高代碼的健壯性!
怎么處理異常:
1.捕獲處理異常
2.斷言處理異?!緶y(cè)試異常信息】[擴(kuò)展]
捕獲處理異常語(yǔ)法:
try:#嘗試,通常情況,將可能出現(xiàn)異常的代碼,包含在try中
????????????????? ? ? ? ? ?? <可能會(huì)出現(xiàn)異常的代碼>
except[異常信息]:#一旦出現(xiàn)異常,代碼就會(huì)直接從出現(xiàn)異常的地方跳轉(zhuǎn)到except中執(zhí)行
????????????????? ? ? ? ? <出現(xiàn)異常之后要執(zhí)行的代碼>
else:#如果try中的代碼執(zhí)行沒有異常,執(zhí)行完畢后,就會(huì)執(zhí)行else中的代碼
?????????????????? <正常執(zhí)行try之后,else中的代碼執(zhí)行>
finally:?#不論是否出現(xiàn)異常,都要在try執(zhí)行完成之后執(zhí)行的代碼
?????????????????????????????????? <最終的掃尾工作>
1.常見的異常
所有異常的超類:BaseException
標(biāo)準(zhǔn)異常的超類:Exception(BaseException)
程序執(zhí)行過(guò)程中經(jīng)??吹降漠惓#?/b>
BaseException? 所有異常的基類
SystemExit? 解釋器請(qǐng)求退出
KeyboardInterrupt? 用戶中斷執(zhí)行(通常是輸入^C)
Exception? 常規(guī)錯(cuò)誤的基類
StopIteration? 迭代器沒有更多的值
GeneratorExit? 生成器(generator)發(fā)生異常來(lái)通知退出
StandardError? 所有的內(nèi)建標(biāo)準(zhǔn)異常的基類
ArithmeticError? 所有數(shù)值計(jì)算錯(cuò)誤的基類
FloatingPointError? 浮點(diǎn)計(jì)算錯(cuò)誤
OverflowError? 數(shù)值運(yùn)算超出最大限制
ZeroDivisionError? 除(或取模)零 (所有數(shù)據(jù)類型)
AssertionError? 斷言語(yǔ)句失敗
AttributeError? 對(duì)象沒有這個(gè)屬性
EOFError? 沒有內(nèi)建輸入,到達(dá)EOF 標(biāo)記
EnvironmentError? 操作系統(tǒng)錯(cuò)誤的基類
IOError? 輸入/輸出操作失敗
OSError? 操作系統(tǒng)錯(cuò)誤
案例:

2.處理多個(gè)異常
try-except?(E1,?E2,?E3,?…,En)表示一個(gè)except處理指定的多個(gè)異常
try? -? exceptE1? -? except?E2? -? except?E3…每個(gè)except處理指定的異常
通常情況下,我們要查看異常信息,就需要打印異常信息—打印e變量的值
案例:
1.try-except (E1, E2, E3, …,En)類型:

2.try? -? exceptE1? -? except E2? -? except E3…類型:

3.自定義異常
異?!环N對(duì)象
自定義異常–一種自定義類型
自定義類型[異常]–參考標(biāo)準(zhǔn)異常(繼承Exception)—自定義異常(繼承Exception)
自定義異常的目的:轉(zhuǎn)換異常信息,將不明確的異常信息轉(zhuǎn)換成更加精確的異常信息
轉(zhuǎn)換異常信息:異常的傳遞~傳遞更加明確的異常,給后面的代碼進(jìn)行處理!
案例:

4.主動(dòng)拋出異常
在開發(fā)的過(guò)程中,主動(dòng)出現(xiàn)一種錯(cuò)誤,將錯(cuò)誤拋出給程序告訴程序出錯(cuò)了。
通過(guò)raise關(guān)鍵字,拋出一個(gè)異常
案例:
