python基礎(chǔ)(16)-異常捕獲

當(dāng)一個(gè)程序發(fā)生異常時(shí),代表該程序在執(zhí)行時(shí)出現(xiàn)了非正常的情況,無(wú)法再執(zhí)行下去。默認(rèn)情況下,程序是要終止的。如果要避免程序退出,可以使用捕獲異常的方式獲取這個(gè)異常的名稱,再通過(guò)其他的邏輯代碼讓程序繼續(xù)運(yùn)行,這種根據(jù)異常做出的邏輯處理叫作異常處理。

開(kāi)發(fā)者可以使用異常處理全面地控制自己的程序。異常處理不僅僅能夠管理正常的流程運(yùn)行,還能夠在程序出錯(cuò)時(shí)對(duì)程序進(jìn)行必的處理。大大提高了程序的健壯性和人機(jī)交互的友好性。

1、先介紹try except

try:
    可能產(chǎn)生異常的代碼塊
except [ (Error1, Error2, ... ) [as e] ]:
    處理異常的代碼塊1
except [ (Error3, Error4, ... ) [as e] ]:
    處理異常的代碼塊2
except  [Exception]:
    處理其它異常

該格式中,[] 括起來(lái)的部分可以使用,也可以省略。其中各部分的含義如下:
(Error1, Error2,...) 、(Error3, Error4,...):其中,Error1、Error2、Error3 和 Error4 都是具體的異常類型。顯然,一個(gè) except 塊可以同時(shí)處理多種異常。
[as e]:作為可選參數(shù),表示給異常類型起一個(gè)別名 e,這樣做的好處是方便在 except 塊中調(diào)用異常類型(后續(xù)會(huì)用到)。
[Exception]:作為可選參數(shù),可以代指程序可能發(fā)生的所有異常情況,其通常用在最后一個(gè) except 塊。
如:

try:
    a = int(input("輸入被除數(shù):"))
    b = int(input("輸入除數(shù):"))
    c = a / b
    print("您輸入的兩個(gè)數(shù)相除的結(jié)果是:", c )
except (ValueError, ArithmeticError) as e:
    print("程序發(fā)生了數(shù)字格式異常、算術(shù)異常之一")
except :
    print("未知異常")
print("程序繼續(xù)運(yùn)行")

此時(shí),有必要粘貼一張異常表,實(shí)際上,我覺(jué)得沒(méi)有必要都記住,只要是認(rèn)識(shí)會(huì)查即可,而且大部分我們也是直接try,except;

image.png

image.png

直接截圖,比較省事
=====================================================
在原本的try except結(jié)構(gòu)的基礎(chǔ)上,python異常處理機(jī)制還提供了一個(gè) else 塊,也就是原有 try except 語(yǔ)句的基礎(chǔ)上再添加一個(gè) else 塊,即try except else結(jié)構(gòu)。

使用 else 包裹的代碼,只有當(dāng) try 塊沒(méi)有捕獲到任何異常時(shí),才會(huì)得到執(zhí)行;反之,如果 try 塊捕獲到異常,即便調(diào)用對(duì)應(yīng)的 except 處理完異常,else 塊中的代碼也不會(huì)得到執(zhí)行。

try:
    result = 20 / int(input('請(qǐng)輸入除數(shù):'))
    print(result)
except ValueError:
    print('必須輸入整數(shù)')
except ArithmeticError:
    print('算術(shù)錯(cuò)誤,除數(shù)不能為 0')
else:
    print('沒(méi)有出現(xiàn)異常')
print("繼續(xù)執(zhí)行")
執(zhí)行結(jié)果:
請(qǐng)輸入除數(shù):4
5.0
沒(méi)有出現(xiàn)異常
繼續(xù)執(zhí)行

===================================================

還有一種拋出異常的方法,和C的assert行為差不多,就是raise
raise的用法,可以直接不帶有任何參數(shù)
也可以帶有參數(shù)
如下:

try:
    a = input("輸入一個(gè)數(shù):")
    if(not a.isdigit()):
        raise ValueError("a 必須是數(shù)字")#也可以直接是raise
except ValueError as e:
    print("引發(fā)異常:",repr(e))
    raise


輸出結(jié)果:
輸入一個(gè)數(shù):a
引發(fā)異常: ValueError('a 必須是數(shù)字',)
Traceback (most recent call last):
  File "D:\python3.6\1.py", line 4, in <module>
    raise ValueError("a 必須是數(shù)字")
ValueError: a 必須是數(shù)字

==================================================
over~

?著作權(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)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

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

  • @[toc]??編寫(xiě)計(jì)算機(jī)程序時(shí),通常能夠區(qū)分正常和異常情況。異常事件可能是錯(cuò)誤,也可能是通常不會(huì)發(fā)生的事情。為處...
    奮斗在阿爾卑斯的皮卡丘閱讀 906評(píng)論 0 0
  • 程序員的一生中,錯(cuò)誤幾乎每天都在發(fā)生。在過(guò)去的一個(gè)時(shí)期, 錯(cuò)誤要么對(duì)程序(可能還有機(jī)器)是致命的,要么產(chǎn)生一大堆無(wú)...
    妄心xyx閱讀 4,088評(píng)論 0 23
  • python提供了兩個(gè)非常重要的功能來(lái)處理python程序在運(yùn)行中出現(xiàn)的異常和錯(cuò)誤。你可以使用該功能來(lái)調(diào)試pyth...
    _寧采臣閱讀 1,095評(píng)論 0 10
  • 什么是異常 本節(jié)開(kāi)始介紹之前,先看看如下程序: 是不是很熟悉,這是我們前面經(jīng)常看到的程序運(yùn)行出現(xiàn)的錯(cuò)誤。作為Pyt...
    瀧汰泱閱讀 525評(píng)論 0 0
  • 第十一章 使用加載項(xiàng)自定義ArcGIS界面 ||| 附錄A 自動(dòng)執(zhí)行Python腳本 我們將在本章介紹以下案例: ...
    muyan閱讀 9,410評(píng)論 0 2

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