異常處理

什么是異常

異常:不正常的情況

不正常的情況,在程序中,會(huì)有兩種體現(xiàn)

  • 自己造孽:寫錯(cuò)代碼了!錯(cuò)誤也是一種異常;程序都運(yùn)行不起來!
  • 程序運(yùn)行過程中,在某些特定條件下,不合適的數(shù)據(jù)引起程序出現(xiàn)錯(cuò)誤導(dǎo)致程序崩潰
    要求用戶輸入一個(gè)數(shù)字,但是用戶誤操作輸入了字符串,在進(jìn)行類型轉(zhuǎn)換時(shí)就會(huì)出現(xiàn)錯(cuò)誤導(dǎo)致程序崩潰!

為什么要處理異常:

當(dāng)程序在運(yùn)行過程中,由于用戶的誤操作或者不合適的數(shù)據(jù)引發(fā)的程序錯(cuò)誤,讓代碼自己處理并保證程序的正常執(zhí)行。而不至于因?yàn)殄e(cuò)誤導(dǎo)致程序崩潰!
提高代碼的健壯性!

怎么處理異常:

  • 捕獲處理異常
  • 斷言處理異常【測(cè)試異常信息】[擴(kuò)展]

捕獲處理異常語法:

  • 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 首先要明確哪些代碼可能會(huì)出現(xiàn)異常,其次定位異??赡艹霈F(xiàn)的代碼的位置,然后將可能出現(xiàn)異常的代碼進(jìn)行異常處理。<適合新手和老鳥>
  • 2 在寫代碼的同時(shí),直接處理異常 <適合老鳥:經(jīng)驗(yàn)>

1.基本異常處理

try-except直接處理異常【可以處理任何異?!荒芏ㄎ痪唧w是什么異常】
try-except [異常信息] 【可以處理指定的異?!?/p>

2.常見的異常

所有異常的超類:BaseException
標(biāo)準(zhǔn)異常的超類:Exception(BaseException)
程序執(zhí)行過程中經(jīng)常看到的異常:
……

3.處理多個(gè)異常

try-except (E1, E2, E3, …,En) as e 一個(gè)except處理指定的多個(gè)異常
try-except E1-except E2-except E3… 每個(gè)except處理指定的異常

通常情況下,我們要查看異常信息,就需要打印異常信息—打印e變量的值
問題:

  • 1)系統(tǒng)提供的異常信息,晦澀難懂!
  • 2)系統(tǒng)提供的異常信息,畢竟有限!

4.自定義異常

異?!?一種對(duì)象
自定義異常 – 一種自定義類型
自定義類型[異常] – 參考標(biāo)準(zhǔn)異常(繼承Exception)—自定義異常(繼承Exception)

5.主動(dòng)拋出異常

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

6.自定義異常,就是為了專門拋出錯(cuò)誤的,拋出錯(cuò)誤,就是嚴(yán)重警告這里出現(xiàn)了什么問題

首先-代碼執(zhí)行過程中,出現(xiàn)了異常【系統(tǒng)標(biāo)準(zhǔn)異?!俊拘畔⒉皇呛苊靼住?br> 捕獲系統(tǒng)異常,創(chuàng)建一個(gè)自定義異常
拋出自定義異常【自定義異?!俊拘畔⒚鞔_的錯(cuò)誤】

自定義異常的目的:轉(zhuǎn)換異常信息,將不明確的異常信息轉(zhuǎn)換成更加精確的異常信息

轉(zhuǎn)換異常信息:異常的傳遞~傳遞更加明確的異常,給后面的代碼進(jìn)行處理!

總結(jié)

什么是異?!臼煜ぎ惓J菛|西】

為什么要處理異常【熟悉】

處理異常的語法【掌握】try-except-else-finally
什么地方需要處理異?!菊莆铡?/p>

自定義異?!玖私狻?/p>

拋出異?!玖私狻?/p>

Finally最終打掃戰(zhàn)場(chǎng)的戰(zhàn)士!
在try-except中,不論是否出現(xiàn)異常,finally中代碼肯定會(huì)執(zhí)行

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容