日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程语言 > python >内容正文

python

Python程序开发——第九章 异常处理

發(fā)布時(shí)間:2024/2/28 python 26 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Python程序开发——第九章 异常处理 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

目錄

  • 一、異常
  • 二、捕獲異常
    • (一)try...except語句
      • 1、單個(gè)異常
      • 2、多個(gè)異常
      • 3、省略異常類
    • (二)try...except...else語句
    • (三)try...except...finally語句
  • 三、拋出異常
    • (一)raise語句
      • 1、異常類型拋出異常
      • 2、異常對(duì)象拋出異常
      • 3、由異常拋出異常
    • (二)assert斷言語句
  • 四、自定義異常

一、異常

python中的異常都是通過類實(shí)現(xiàn)的,所有的異常類都是繼承自基類BaseException,可分為四類如下:

若程序中的異常沒有被處理,則默認(rèn)情況下該異常會(huì)被傳遞給上一級(jí),這就是異常的傳遞,若上一級(jí)仍未處理,則會(huì)繼續(xù)向上傳遞直至異常被處理或程序崩潰。

二、捕獲異常

(一)try…except語句

該語句用于捕獲程序運(yùn)行時(shí)時(shí)的異常,其中try子句后面跟代碼,except子句后跟捕獲的異常類型以及當(dāng)捕獲到異常后的處理代碼。簡(jiǎn)單的來說,當(dāng)try子句中若有異常,則忽略該子句中的剩余代碼,立即執(zhí)行except子句中的代碼,而當(dāng)try子句沒有異常則不執(zhí)行except子句后的內(nèi)容。

try:代碼 except(異常類型):異常處理代碼

python中標(biāo)準(zhǔn)異常有以下:python標(biāo)準(zhǔn)異常
例如下列python代碼,這里try子句中由于未聲明d變量,使產(chǎn)生NameError:未聲明/初始化對(duì)象 (沒有屬性)的異常,except子句中檢測(cè)到異常從而執(zhí)行正確的代碼:

try:a = 1b = 2c = a * dprint(c) except NameError:c = a * bprint(c)

運(yùn)行結(jié)果如下:

1、單個(gè)異常

可以通過在異常類型后跟as e/error 的形式來用于記錄具體的異常類型,其中e/error獲取異常信息。
例如下列python代碼:

try:a = 1b = 2c = a * dprint(c) except NameError as e:print(f"程序異常,異常原因是:{e}")c = a * bprint(c)

運(yùn)行結(jié)果如下,其中的name ‘d’ is not defined就是所記錄的異常信息:

2、多個(gè)異常

可能代碼中有多個(gè)異常,可通過將異常類一并放在except子句后或使用多個(gè)except子句。
例如下列python代碼,這里except (TypeError, NameError) as error的含義是當(dāng)程序中有對(duì)類型無效的操作(TypeError)或未聲明/初始化對(duì)象(NameError)時(shí)輸出異常信息:

try:def function(a, b):print(a, b)function(2, 3, 4) except (TypeError, NameError) as error:print(f"程序異常,異常原因是:{error}")

運(yùn)行結(jié)果如下:

也可以分開寫多個(gè)except子句,即當(dāng)程序中有不同的異常時(shí)執(zhí)行哪個(gè)子句。
例如下列python代碼,程序中有對(duì)類型無效的操作時(shí)通過input()函數(shù)接收一個(gè)標(biāo)準(zhǔn)輸入數(shù)據(jù)c并輸出該數(shù)據(jù),而當(dāng)程序中有未聲明/初始化對(duì)象的異常時(shí)輸出記錄的異常信息:

try:def function(a, b):a = b + cprint(a)function(1, 2) except TypeError as error:print(f"程序異常,異常原因是:{error}") except NameError as error:print(f"程序異常,異常原因是:{error}")c = input("請(qǐng)輸入變量c的值:")print(c)

運(yùn)行結(jié)果如下,由于未聲明變量c:

3、省略異常類

省略異常類即省略except子句后的異常類型,表明處理所有捕獲到的程序異常。
例如下列python代碼:

try:a = 1b = 2c = a + dprint(c) except:print("捕獲到異常!")

運(yùn)行結(jié)果如下:

(二)try…except…else語句

在try…except語句后加一個(gè)else子句,該子句的內(nèi)容即當(dāng)try子句沒有發(fā)生任何異常時(shí)執(zhí)行的代碼。
例如下列python代碼,當(dāng)程序有未聲明/初始化對(duì)象的異常情況時(shí)輸出提示,若無異常則輸出a-b的值:

try:a = 1b = 2c = a + bprint(c) except NameError:print("未聲明/初始化對(duì)象!") else:c = a - bprint(c)

運(yùn)行結(jié)果如下:

(三)try…except…finally語句

try…except語句與finally子句一起運(yùn)用時(shí),表示無論是否捕獲到異常,finally子句內(nèi)的代碼都要執(zhí)行,比如在處理文件時(shí)就要用到finally子句,即用于關(guān)閉文件從而避免占用資源。
例如下列python代碼,這里finally子句中不管是否有異常,該子句內(nèi)的文件關(guān)閉file.close()都要執(zhí)行:

try:file = open("file1.txt", mode="r", encoding="utf-8")file.write("123456789") except Exception as error:print(f"文件寫入失敗!原因是:{error}") finally:file.close()print("文件已被關(guān)閉!")

運(yùn)行結(jié)果如下:

也可以通過with語句來釋放文件,執(zhí)行語句后with語句會(huì)關(guān)閉文件,若文件不能打開則也會(huì)關(guān)閉文件,格式如下:

with 上下文表達(dá)式 [as 資源對(duì)象]語句

這里的上下文表達(dá)式返回一個(gè)上下文資源器對(duì)象,若指定了as子句,則將上下文資源管理器對(duì)象的__enter__()方法的返回值賦值給資源對(duì)象,另外要注意不是所有對(duì)象都可以使用with語句,只有支持上下文管理協(xié)議的對(duì)象才可以使用該語句。

三、拋出異常

捕獲異常可以理解為程序有異常系統(tǒng)報(bào)錯(cuò),另外我們可以通過相關(guān)的語句來使異常主動(dòng)拋出。

(一)raise語句

1、異常類型拋出異常

在raise語句后跟異常類型,即可以通過使用異常類型的名稱從而拋出異常。
例如下列python代碼,通過使用raise語句拋出OverflowError異常,該異常類型表示數(shù)值運(yùn)算超出最大限制:

raise OverflowError

運(yùn)行結(jié)果如下:

2、異常對(duì)象拋出異常

例如下列python代碼,創(chuàng)建了一個(gè)OverflowError類的obj_error對(duì)象并通過raise語句拋出對(duì)象:

obj_error = OverflowError() raise obj_error

運(yùn)行結(jié)果如下:

3、由異常拋出異常

通過單用raise關(guān)鍵字可以重新拋出發(fā)生的異常。
例如下列python代碼:

try:print(a) except NameError as error:print(f"文件寫入失敗!原因是:{error}")raise

運(yùn)行結(jié)果如下:

(二)assert斷言語句

assert斷言語句用于判斷一個(gè)表達(dá)式是否為真,若為假則拋出AssertionError異常,格式如下,其中表達(dá)式是判斷的對(duì)象,參數(shù)通常是一個(gè)自定義的描述異常具體信息的字符串:

assert 表達(dá)式[,參數(shù)]

例如下列python代碼,1<-1表達(dá)式為假所以程序拋出AssertionError異常:

a = 1 b = -1 assert a < b

運(yùn)行結(jié)果如下:

四、自定義異常

雖然python中定義了很多的異常類型,但我們也可以自定義異常,即通過創(chuàng)建一個(gè)類,讓其繼承Exception類或其它類。
例如下列python代碼,首先自定義異常my_error類,在其類的構(gòu)造方法中調(diào)用基類Exception的__init__方法并將異常信息作為參數(shù)

class my_error(Exception):def __init__(self, error="格式錯(cuò)誤"):super().__init__(error)def f_main():file_name = input("請(qǐng)輸入文件名稱:")try:if file_name.split(".")[1] in ["txt", "doc"]:print("文件名稱無異常!")else:raise my_error()except Exception as error:print(f"程序異常,異常原因是:{error}")f_main()

運(yùn)行結(jié)果如下:

總結(jié)

以上是生活随笔為你收集整理的Python程序开发——第九章 异常处理的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。