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

歡迎訪問 生活随笔!

生活随笔

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

python

python基础(part14)--异常处理

發(fā)布時(shí)間:2023/12/19 python 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 python基础(part14)--异常处理 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

鄙人學(xué)習(xí)筆記
開發(fā)工具:Spyder


文章目錄

    • 異常處理
      • 異常
      • 異常處理
        • 舉個(gè)例子1
        • 舉個(gè)例子2
      • raise語句
        • 案例
      • 自定義異常
        • 案例


異常處理

我們先以一個(gè)例子為開頭

代碼:

控制臺(tái)輸入5,則正常運(yùn)行:

但如果我們輸入xxx, 那么回怎樣呢:

python會(huì)報(bào)錯(cuò)!出現(xiàn)ValueErroe錯(cuò)誤.

如果我們輸入0,有會(huì)怎樣呢:

python又報(bào)錯(cuò)了!出現(xiàn)ZeroDivisionErroe錯(cuò)誤

備注:如果代碼出現(xiàn)錯(cuò)誤,那么發(fā)生錯(cuò)誤之后的代碼,則不會(huì)運(yùn)行(”后續(xù)邏輯…….”沒有被打印)

異常

  • 定義

異常就是運(yùn)行時(shí)檢測(cè)到的錯(cuò)誤(在有些語言中,比如JAVA,錯(cuò)誤和異常是有明確區(qū)別的. 但在python中異常和錯(cuò)誤的界定不清晰, 我們則可以說錯(cuò)誤是一種異常)。

  • 現(xiàn)象

當(dāng)運(yùn)行時(shí),程序不會(huì)再向下執(zhí)行,而轉(zhuǎn)到函數(shù)的調(diào)用語句。

比如:

  • 常見的異常類型

名稱異常(NameError):變量未定義。
類型異常(TypeError):不同類型數(shù)據(jù)進(jìn)行運(yùn)算。
索引異常(IndexError):超出索引范圍。
屬性異常(AttributeError):對(duì)象沒有對(duì)應(yīng)名稱的屬性。
鍵異常(KeyError):沒有對(duì)應(yīng)名稱的鍵。
為實(shí)現(xiàn)異常(NotImplementedError):尚未實(shí)現(xiàn)的方法。

備注:Exception類為異常基類,是其他所有異常類的父類.

異常處理

為了不讓異常影響到之后的程序運(yùn)行,我們就需要進(jìn)行異常的處理,“讓異常變?yōu)檎!薄?/p>

  • 語法
try:可能觸發(fā)異常的語句 except 錯(cuò)誤類型1 [as 變量1]:處理語句1 except 錯(cuò)誤類型2 [as 變量2]:處理語句2 except Exception [as 變量3]:不是以上錯(cuò)誤類型的處理語句 else:未發(fā)生異常的語句 finally: 無論是否發(fā)生異常的語句
  • 作用

將程序由異常狀態(tài)轉(zhuǎn)為正常流程。

  • 說明
子句含義
as子句是用于綁定錯(cuò)誤對(duì)象的變量,可以忽略
except子句該子句可以有一個(gè)或多個(gè),用來捕獲某種類型的錯(cuò)誤
else子句該子句最多只能有一個(gè)
finally子句該子句最多只能有一個(gè),如果沒有except子句,該子句就必須存在

舉個(gè)例子1

代碼:

異常處理:

運(yùn)行, 并在控制臺(tái)輸入ss:


由結(jié)果可知,經(jīng)過異常處理后,我們將發(fā)生的異常打印的出來,并執(zhí)行了后面的代碼。

如果我們修改一下處理語句,如下所示:

運(yùn)行一下, 并在控制臺(tái)先輸入xx, 異常被處理后,再故意輸入ff:

結(jié)果會(huì)怎樣呢?

會(huì)報(bào)錯(cuò)!這是因?yàn)楫?dāng)person_count = int(input(“請(qǐng)輸入人數(shù):”))語句又發(fā)生異常時(shí),它找回了調(diào)用它的語句div_apple(10)(注意:是except下的div_apple(10)),python發(fā)現(xiàn)并沒有 try-except的異常處理語句幫他處理,于是他就報(bào)錯(cuò)了。

Exception類可以捕獲到所有類型的異常。但是如果只寫它,我們就不能對(duì)具體錯(cuò)誤,做出相應(yīng)的處理邏輯。

如果我們?cè)傩薷囊幌绿幚碚Z句,如下所示:

我們?cè)囍\(yùn)行一下, 并在控制臺(tái)輸入0:

我們?cè)龠\(yùn)行一下, 并在控制臺(tái)輸入af:


這樣我們就可以對(duì)癥下藥,對(duì)具體錯(cuò)誤,做出相應(yīng)的處理。

但是,我們可能不會(huì)預(yù)測(cè)到所有會(huì)發(fā)生的錯(cuò)誤。這時(shí),我們就可以,在末尾加一個(gè)Exception捕獲剩余錯(cuò)誤。

我們修改一下處理語句:

這樣就可以既做到對(duì)癥下藥,又做到面面俱到。

舉個(gè)例子2

我們?cè)谔幚碚Z句中增加一個(gè)else(當(dāng)沒有發(fā)生異常時(shí),執(zhí)行的語句):

我們?cè)龠\(yùn)行一下, 并在控制臺(tái)輸入4:


除此之外,還有一個(gè)關(guān)鍵字finally(不管有沒有異常都執(zhí)行), 我們測(cè)試一下:

我們先在控制臺(tái)輸入一個(gè)有錯(cuò)的f:

我們?cè)僭诳刂婆_(tái)輸入一個(gè)沒錯(cuò)的4:


但是我們要是把print(“無論是否發(fā)生異常, 都執(zhí)行的邏輯”)寫在處理異常的語句之外(詳見下圖),這句話也可以執(zhí)行,那么這個(gè)finally到底有啥用呢?

請(qǐng)聽下回分解!

raise語句

  • 作用

拋出一個(gè)錯(cuò)誤,讓程序進(jìn)入異常狀態(tài)。

  • 目的

在程序調(diào)用層數(shù)較深時(shí),向主函數(shù)傳遞錯(cuò)誤信息要層層retrun比較麻煩(或者干脆就不能寫return)。所以,可以人為拋出異常,直接傳遞錯(cuò)誤信息。

  • 圖示

假如我們有一個(gè)方法fun01,它調(diào)用了方法fun02, fun02調(diào)用了方法fun03, fun03調(diào)用了方法fun04。當(dāng)我們想用fun04向fun01傳遞一個(gè)信息時(shí),可以層層return,一層一層的傳遞數(shù)據(jù):

但是我們也可以用fun04人為拋出一個(gè)異常,直接把信息傳遞給fun01:

案例

我們創(chuàng)建一個(gè)Bunny類,如果創(chuàng)建的Bunny對(duì)象的age不符合,大于等于0且小于等于5的要求,我們就拋出異常。

代碼:

class Bunny:__slots__ = ("__age")def __init__(self, age):self.age = age@propertydef age(self):return self.__age@age.setterdef age(self, value):if 0 <= value <= 5:self.__age = valueelse:raise ValueError("非幼年")try:b01 = Bunny(6)print(b01.age)except Exception as e:print(e)

結(jié)果:

自定義異常

如果python提供的異常類型,并不滿足我們的需求,我們就可以自定義異常。

  • 語法

定義自定義異常:

class 類名Error(Exception):def __init__(self,參數(shù)):super().__init__(參數(shù))self.數(shù)據(jù) = 參數(shù)

調(diào)用自定義異常:

try:...raise 自定義異常類名(參數(shù))... except 定義異常類 as 變量名:變量名.數(shù)據(jù)
  • 作用

封裝錯(cuò)誤信息

案例

我們?cè)谏厦嬉粋€(gè)案例中借用了ValueError異常類型,人為拋出異常,但是我們覺得,并不能滿足我們的需求,我們想自己創(chuàng)建一個(gè)專用的異常類,拋出錯(cuò)誤信息。

創(chuàng)建異常類:

class AgeError(Exception):def __init__(self, msg, age_value):super().__init__(msg)self.age_value = age_value

備注:msg表示錯(cuò)誤的信息[這是一定要傳的參數(shù),并且要傳給父類的構(gòu)造方法], 我們還可以自己傳一些想傳遞的信息,比如:age_value錯(cuò)誤的年齡

調(diào)用自定義異常類:

class Bunny:__slots__ = ("__age")def __init__(self, age):self.age = age@propertydef age(self):return self.__age@age.setterdef age(self, value):if 0 <= value <= 5:self.__age = valueelse:raise AgeError("非幼年", value)

創(chuàng)建Bunny類,并處理異常,打印出,異常信息:

try:b01 = Bunny(6)print(b01.age)except AgeError as e:print(e.args)print(e.age_value)

結(jié)果:

總結(jié)

以上是生活随笔為你收集整理的python基础(part14)--异常处理的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

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

主站蜘蛛池模板: 欧美一区二区最爽乱淫视频免费看 | 毛片网站在线播放 | 中文字幕亚洲乱码 | 久久精品国产亚洲av高清色欲 | 欧美黄色一区 | 欧日韩一区二区三区 | www.亚洲一区二区 | 国产一区在线看 | 欧美精品在线看 | 久久久免费电影 | 日韩欧美偷拍 | 久久精品一区二区三区不卡牛牛 | 欧美日韩国产一区二区三区 | 欧美一区二区三区电影 | 日本a级黄色 | 青青草免费在线观看视频 | 无码国精品一区二区免费蜜桃 | 韩国日本美国免费毛片 | 国语对白做受69 | 亚洲av永久无码精品一百度影院 | 免费啪视频 | 姐姐的秘密韩剧免费观看全集中文 | 视频一区日韩 | 欧美成人精品一区二区三区 | 色悠悠网 | 国模在线 | 欧美成人精品一区二区三区在线观看 | 亚洲精品123区| 国产欧美精品一区二区在线播放 | 综合色区 | 全部毛片永久免费看 | 又黄又骚又爽 | 精品国产成人亚洲午夜福利 | 男女又爽又黄 | 东京久久| 亚洲av成人一区二区国产精品 | 成人国产毛片 | 粗喘呻吟撞击猛烈疯狂 | 亚州av一区二区 | 97超碰国产在线 | 性生活视频在线播放 | 国产av无码专区亚洲av毛片搜 | 日日夜夜精 | 日韩有码中文字幕在线 | 中文字幕av一区二区 | 日本色区| 51调教丨国产调教视频 | 自拍偷拍 亚洲 | 超碰97国产精品人人cao | 欧美成人短视频 | 女人下部全棵看视频 | 亚洲第一精品在线 | 级毛片内射视频 | 精品三级网站 | 舐丝袜脚视频丨vk | www.日日夜夜 | 动漫美女露胸网站 | 国产又粗又猛又大爽 | 成人免费观看a | 一曲二曲三曲在线观看中文字幕动漫 | 日韩欧美一区二区视频 | 日韩免费一区二区 | 在线国产视频 | 青青99 | 日韩二级| 天堂精品久久 | sm捆绑调教视频 | 伊人avav | 日韩久久一区 | 青青久操 | 手机av免费观看 | 欧美乱妇视频 | 色呦呦网站入口 | 免费久久网站 | 欧美成人精品一区二区综合免费 | 欧美性色黄 | 亚洲最新av | xvideos成人免费视频 | 免费黄色在线看 | a黄色一级片| 精品自拍视频在线观看 | 潮喷失禁大喷水无码 | 欧美黄色大片免费观看 | 黄色网址在线免费看 | 亚洲精品福利视频 | 91av在线网站| av电影在线不卡 | 国产91一区二区三区在线精品 | 国产精品丝袜黑色高跟鞋的设计特点 | 日本激情视频在线 | 中文字幕一区二区三区视频 | 亚洲精品无码永久在线观看 | 男操女视频网站 | 久久奇米 | 51久久久| 人人妻人人澡人人爽人人dvd | 欧美一区二区三区公司 | 极品白嫩的小少妇 | 黑人操日本女人 |