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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > python >内容正文

python

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

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

目錄

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

一、異常

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

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

二、捕獲異常

(一)try…except語句

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

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

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

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

運行結(jié)果如下:

1、單個異常

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

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

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

2、多個異常

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

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

運行結(jié)果如下:

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

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("請輸入變量c的值:")print(c)

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

3、省略異常類

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

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

運行結(jié)果如下:

(二)try…except…else語句

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

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

運行結(jié)果如下:

(三)try…except…finally語句

try…except語句與finally子句一起運用時,表示無論是否捕獲到異常,finally子句內(nèi)的代碼都要執(zhí)行,比如在處理文件時就要用到finally子句,即用于關閉文件從而避免占用資源。
例如下列python代碼,這里finally子句中不管是否有異常,該子句內(nèi)的文件關閉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("文件已被關閉!")

運行結(jié)果如下:

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

with 上下文表達式 [as 資源對象]語句

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

三、拋出異常

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

(一)raise語句

1、異常類型拋出異常

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

raise OverflowError

運行結(jié)果如下:

2、異常對象拋出異常

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

obj_error = OverflowError() raise obj_error

運行結(jié)果如下:

3、由異常拋出異常

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

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

運行結(jié)果如下:

(二)assert斷言語句

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

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

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

a = 1 b = -1 assert a < b

運行結(jié)果如下:

四、自定義異常

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

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

運行結(jié)果如下:

總結(jié)

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

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