亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 開發 > Python > 正文

Python中的異常處理

2023-04-25 12:32:06
字體:
來源:轉載
供稿:網友

一個程序即使語法正確,也可能在執行過程中會產生錯誤,這些錯誤往往會導致程序非預期提前終止。

在程序執行中遇到的錯誤,我們稱之為異常(Exception)。

在程序中對異常進行處理可以提高用戶的體驗。

在Python中也提供了類似Java、C#等異常處理方法。

一、Python異常處理簡介

Python使用try, except 和 finally三個關鍵字來處理異常,在異常處理形式上與其它語言相同,但語法使用的關鍵字稍有不同。

把可能出現異常的語句放在try語句塊中,而異常的捕獲與處理過程放在 except 語句塊中。

在一次異常處理中可以包含多個except語句塊,以便用于捕獲和處理不同的異常。

不管異常是否發生,放在finally語句塊中的語句總會被執行到。利用這個機制可以在程序中用于釋放資源或在程序中出現異常時進行其他的處理操作,如保存游戲進度等。

在Python中也可以使用else語句塊配合異常處理。即沒有異常發生時執行else語句塊中的語句。

二、Python中異常處理的方法

其語法格式如下:

try:
    #可能出現異常的語句
except 異常類1 as 變量1:
    #異常處理語句
except 異常類2 as 變量2:
    #異常處理語句
...
finally:
    #finally語句塊

上面語法格式中,except可以出現多次,finally語句塊是可選的語句塊。

下面舉例子來說明:

def divide(x, y):
    try:
        print(f"{x} / {y} = {x / y}")
    except ZeroDivisionError as e:
        print("發生錯誤:除數為0。")

divide(2008, 4)
divide(2008, 0)
divide(2008, 100)

輸出情況如下:

2008 / 4 = 502.0
發生錯誤:除數為0。
2008 / 100 = 20.08

下面是沒有異常處理的情況:

def divide(x, y):
    print(f"{x} / {y} = {x / y}")

divide(2008, 4)
divide(2008, 0)
divide(2008,100)

 輸出情況如下:

2008 / 4 = 502.0
Traceback (most recent call last):
   File "D:/01Lesson/PY/exceptionhandle02.py", line 5, in <module>
      divide(2008, 0)
   File "D:/01Lesson/PY/exceptionhandle02.py", line 2, in divide
      print(f"{x} / {y} = {x / y}")
ZeroDivisionError: division by zero
從上面兩個例子可以看出,在可能出現異常的地方若不對異常進行處理,將導致程序非預期終止(第3個函數調用并沒有被執行),而使用異常處理后,在給出友好提示的同時,還能使程序繼續執行下去。

在第1個例子中,我們使用了除數為0的異常類,并聲明了變量e。但在程序中并沒有使用它,實際上也可以省略它,省略時的樣子如下:

def divide(x, y):
    try:
        print(f"{x} / {y} = {x / y}")
    except ZeroDivisionError:
        print("發生錯誤:除數為0。")

divide(2008, 4)
divide(2008, 0)
divide(2008, 100)

輸出情況如下:

2008 / 4 = 502.0
發生錯誤:除數為0。
2008 / 100 = 20.08

 也可以在輸出時直接輸出變量e。例子如下:

def divide(x, y):
    try:
        print(f"{x} / {y} = {x / y}")
    except ZeroDivisionError as e:
        print(e)

divide(2008, 4)
divide(2008, 0)
divide(2008, 100)

輸出情況如下:

2008 / 4 = 502.0
division by zero
2008 / 100 = 20.08

 二、異常基類

(1)BaseException 是所有內建異常的基類,不能被用戶由用戶定義的異常所繼承;由該基類直接派生的子類有:

①Exception 見(2)中的描述;

②GeneratorExit 當生成器或協同進程被關閉時引發的異常;

③KeyboardInterrupt 當用戶按下中斷鍵(通常是control-c 或delete)時引發的異常;

④SystemExit 由sys.exit()函數引發的異常。

(2)Exception 所有內建,非系統退出性異常都派生于此類,用戶定義的異常也由此類所派生;

(3)ArithmeticError  由算術錯誤導致的內建異常的基類: OverflowError, ZeroDivisionError, FloatingPointError.;

(4)BufferError  與緩沖區相關的操作無法執行時引發的異常;

(5)LookupError  當匹配或序列索引操作所提供的索引或鍵無效時引發的異?;悾篒ndexError, KeyError。

三、一些具體的內建異常類

(1)AssertionError 當assert語句無效時引發的異常;

(2)AttributeError 當引用屬性或為其負值失敗時引發的異常;

(3)EOFError 當調用input()函數沒有讀取到數據而到達文件末尾(EOF)時而引發的異常;

(4)ImportError 當import語句加載模塊遇到問題時引發的異常;

(5)IndexError 序列操作下標超出范圍時引發的異常;

(6)KeyError 在匹配的鍵在鍵集中未找到時引發的異常;

(7)MemoryError 當操作耗盡內存時引發的異常;

(8)NameError 在局部或全局中未找到相關命名時引發的異常;

(9)TypeError  當運算或函數調用使用的對象不匹配時引發的異常;

(10)ZeroDivisionError 在除法或取模運算中,第二個參數為0時引發的異常。

四、具有多個except語句塊的異常處理

在實際中,一段代碼可能會產生多種異常,我們可以使用多個except語句塊來捕捉相應的異常進行處理。下面這個例子說明具有多個except語句塊時的使用方法。

v1 = input("請輸入被除數:")
v2 = input("請輸入除數:")

try:
    x = float(v1)
    y = float(v2)
    q = x / y
    print(f"{x}÷{y} = {q}")
except TypeError as te:
    print(te)
except ZeroDivisionError as zde:
    print(zde)
except ValueError as ve:
   print(ve)

執行輸入與輸出情況:

請輸入被除數:100
請輸入除數:e
could not convert string to float: 'e'

請輸入被除數:100
請輸入除數:0
float division by zero

請輸入被除數:100
請輸入除數:5
100.0÷5.0 = 20.0

在Python 3.8.2 IDLE的執行情況如下圖所示:

Python中捕獲多個異常

五、捕獲未知異常

在我們無法知道所有的異常類的情況下,我們可以使用except捕獲所有可能的異常。即在except塊中不必給出具體的異常類。下面一段程序演示了該種情況下的使用方法:

def divide(x, y):
    try:
        print(f"{x} / {y} = {x / y}")
    except ZeroDivisionError as e:
        print("發生錯誤:除數為0。")
    except:
        print("發生未知錯誤。")

divide(2008, 4)
divide(2008, 'a')
divide(2008, 0)
divide(2008, 100)

 執行輸出結果如下:

2008 / 4 = 502.0
發生未知錯誤。
division by zero
2008 / 100 = 20.08
在我們無法知道程序具體發生哪些異常時,使用except捕獲未知異常是一件非常有益的事情。

六、else語句塊的使用

else語句塊是可選部分。當try語句塊沒有捕獲到異常時,就會執行else語句塊中的內容。

下面程序中使用了else語句塊:

def divide(x, y):
    try:
        print(f"{x}/{y}={x/y}")
    except ZeroDivisionError as e:
        print(e)
    else:
        print("函數一切正常。")

divide(2021, 3)
divide(2021, 0)
divide(2021, 10)

在Python 3.8.2 IDLE運行情況如下圖所示:

Python異常處理else語句塊的使用

從上面的例子中可以看出,當程序執行過程中沒有遇到異常時就會輸出else語句塊中的內容:函數一切正常。

七、finally語句塊的使用

不管程序是否遇到了異常,finally語句塊都會被執行。這常常用于程序釋放資源,執行一些清理性工作。下面的例子演示了finally語句塊的使用。

def divide(x, y):
    try:
        print(f"{x}/{y}={x/y}")
    except ZeroDivisionError as e:
        print(e)
    finally:
        print("finally:清理活動。")

divide(2021, 3)
divide(2021, 0)
divide(2021, 10)

運行結果如下:

2021/3=673.6666666666666
finally:清理活動。
division by zero
finally:清理活動。
2021/10=202.1
finally:清理活動。

在Python 3.8.2 IDLE的運行情況如下圖所示:

Python異常處理finally語句塊的使用

以上是關于Python中異常處理的基本情況,在今后的文章中將進一步講解用戶自定義異常的方法。

本文(完)

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
亚洲精品自在久久| 另类图片亚洲另类| 亚洲精品中文字幕女同| 亚洲欧美在线播放| www.99久久热国产日韩欧美.com| 亚洲电影免费观看高清| 欧美成人精品在线| 中文字幕久精品免费视频| 国产综合久久久久久| 欧美疯狂性受xxxxx另类| 久久久999精品| 日韩精品视频在线观看免费| 人人做人人澡人人爽欧美| 久久久久久欧美| 岛国av一区二区三区| 久久久久久久久久久久久久久久久久av| 成人在线视频福利| 自拍视频国产精品| 亚洲综合小说区| 日韩精品日韩在线观看| 欧美在线观看日本一区| 欧美亚洲一区在线| 欧美国产日韩二区| 欧美极品少妇xxxxⅹ免费视频| 欧美wwwwww| 北条麻妃99精品青青久久| 欧美精品www在线观看| 亚洲欧洲在线播放| 日韩欧美成人网| 91在线视频九色| 国产精品香蕉在线观看| 久久久女人电视剧免费播放下载| 久久久亚洲国产天美传媒修理工| 97精品国产aⅴ7777| 欧洲成人午夜免费大片| 国产伦精品一区二区三区精品视频| 伊人久久精品视频| 欧美成人h版在线观看| 亚洲国产欧美一区二区丝袜黑人| 午夜精品一区二区三区在线视频| 日韩精品免费在线播放| 中文字幕亚洲欧美日韩2019| 欧美视频在线视频| 亚洲欧美国产精品久久久久久久| 日韩国产高清视频在线| 欧美视频在线观看免费网址| 91精品久久久久久久| 亚洲天堂av网| 7777精品久久久久久| 亚洲精品电影网站| 欧美成人高清视频| 91精品国产色综合| 欧美巨猛xxxx猛交黑人97人| 色综合久久中文字幕综合网小说| 久久久久久久国产精品视频| 久久久久久久一| 国产成人综合精品在线| 成人日韩在线电影| 欧美日韩中文字幕综合视频| 2019国产精品自在线拍国产不卡| 国外成人免费在线播放| 欧美黑人狂野猛交老妇| 亚洲第一福利在线观看| 国产精品视频一区国模私拍| 亚洲精品美女久久久| 日韩av在线免费播放| 久久99久久久久久久噜噜| 成人精品视频久久久久| 久久久国产精品亚洲一区| 欧美视频在线观看免费| 久久777国产线看观看精品| 午夜精品99久久免费| 91青草视频久久| 成人h片在线播放免费网站| 国产原创欧美精品| 日韩亚洲在线观看| 欧美在线视频导航| 国产精品久久久久久久app| 亚洲综合第一页| 中文国产成人精品久久一| 91av网站在线播放| 国产拍精品一二三| 国产视频综合在线| 北条麻妃久久精品| 日韩av片永久免费网站| 欧美多人爱爱视频网站| 一区二区福利视频| 91系列在线播放| 精品视频在线播放色网色视频| 国产在线98福利播放视频| 欧美日韩一区二区精品| 国产成人精品久久| 成人久久久久久| 欧美福利在线观看| 亚洲天堂成人在线| 欧美日韩免费网站| 久久久亚洲影院你懂的| 国产福利视频一区二区| 久热精品视频在线观看| 91九色视频导航| 日韩视频免费大全中文字幕| 日韩视频免费观看| 午夜欧美不卡精品aaaaa| 日韩欧美成人免费视频| 成人黄色在线播放| 欧美性xxxx在线播放| 欧美激情视频在线免费观看 欧美视频免费一| 2019中文字幕全在线观看| 久久久亚洲福利精品午夜| 色悠悠国产精品| 亚洲国产精品一区二区三区| 91干在线观看| 久久av在线播放| 国产一区二中文字幕在线看| 国产一区二区三区免费视频| 欧美丰满少妇xxxx| 色综合导航网站| 色与欲影视天天看综合网| 欧美最近摘花xxxx摘花| 国产亚洲美女精品久久久| 国产主播喷水一区二区| 亚洲精品久久视频| 97精品久久久| 国产精品黄页免费高清在线观看| 久久久精品2019中文字幕神马| 色综合色综合久久综合频道88| 欧美性在线观看| 91精品国产91久久久久| 亚洲专区中文字幕| 成人h片在线播放免费网站| 色综合伊人色综合网| 久久亚洲精品国产亚洲老地址| 欧美福利小视频| 国产精品极品尤物在线观看| 亚洲成人精品久久久| 91在线免费网站| 久久国产一区二区三区| 久久视频免费在线播放| 丝袜一区二区三区| 国产亚洲精品久久久久动| 爱福利视频一区| 高清一区二区三区四区五区| 国产精品久久久久久久午夜| 九九精品在线播放| 日韩成人在线播放| 日韩最新在线视频| 欧美高清激情视频| 奇门遁甲1982国语版免费观看高清| 国产欧美一区二区三区久久人妖| 91久久久在线| 精品久久久一区| 91成人在线播放| 亚洲欧美日韩中文视频| 亚洲精品美女在线观看| 欧美视频在线观看免费| 精品一区精品二区| 91久久综合亚洲鲁鲁五月天| 日产日韩在线亚洲欧美| 久久久成人精品视频| 亚洲精品98久久久久久中文字幕| 久久久久久网址| 亚洲欧美成人一区二区在线电影| 亚洲美女动态图120秒| 另类少妇人与禽zozz0性伦|