最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

詳解python中的異常捕獲

 更新時(shí)間:2020年12月15日 11:05:08   作者:the3times  
這篇文章主要介紹了python中的異常捕獲的相關(guān)資料,幫助大家更好的理解和使用python,感興趣的朋友可以了解下

異常

異常是程序發(fā)生錯(cuò)誤的信號,程序一旦出錯(cuò)就會(huì)拋出異常,程序的運(yùn)行隨之終止。

# 異常處理的三個(gè)特征
- 異常的追蹤信息
- 異常的類型
- 異常的內(nèi)容

捕獲異常的目的:為了增強(qiáng)程序的健壯性,即便程序運(yùn)行過程中出錯(cuò),也不要終止程序,而是捕獲異常并處理,將出錯(cuò)信息記錄到日志內(nèi)。

# 語法上錯(cuò)誤SyntaxError
- 處理方式1:必須在程序運(yùn)行前就改正

# 邏輯上的錯(cuò)誤
- 錯(cuò)誤發(fā)生的條件是可以預(yù)知的 --> if判斷
- 錯(cuò)誤發(fā)生的條件是無法預(yù)知的 --> 異常捕獲 try

本來程序一旦出現(xiàn)異常就整體結(jié)束掉了,有了異常處理以后,在被檢測的代碼塊出現(xiàn)異常時(shí),被檢測的代碼塊中異常發(fā)生位置之后的代碼將不會(huì)執(zhí)行,取而代之的是執(zhí)行匹配異常的except子代碼塊,其余代碼均正常運(yùn)行。

異常捕獲

當(dāng)被檢測的代碼塊中有可能觸發(fā)不同類型的異常時(shí),針對不同類型的異常:

如果我們想分別用不同的邏輯處理,需要用到多分支的except(類似于多分支的elif,從上到下依次匹配,匹配成功一次便不再匹配其他)

try:
  # 有可能會(huì)拋出異常的代碼
  子代碼1
  子代碼2
  子代碼3
except 異常類型1 as e:	# as語法將異常類型的值賦值給變量e,這樣我們通過打印e便可以知道錯(cuò)誤的原因
  pass
except 異常類型2 as e:
  pass
...
else:
  如果被檢測的子代碼塊沒有異常發(fā)生,則會(huì)執(zhí)行else的子代碼
finally:
  無論被檢測的子代碼塊有無異常發(fā)生,都會(huì)執(zhí)行finally的子代碼

  
# try不能和else單獨(dú)連用
# try 和 finally 連用,就算出了異常也先執(zhí)行finally下代碼塊再拋出異常

如果我們想多種類型的異常統(tǒng)一用一種邏輯處理,可以將多個(gè)異常放到一個(gè)元組內(nèi),用一個(gè)except匹配。

try:
  被檢測的代碼塊
except (NameError,IndexError,TypeError):
  觸發(fā)NameError或IndexError或TypeError時(shí)對應(yīng)的處理邏輯

如果我們想捕獲所有異常并用一種邏輯處理,Python提供了一個(gè)萬能異常類型 Exception

try:
  被檢測的代碼塊
except NameError:
  觸發(fā)NameError時(shí)對應(yīng)的處理邏輯
except IndexError:
  觸發(fā)IndexError時(shí)對應(yīng)的處理邏輯
except Exception:
  其他類型的異常統(tǒng)一用此處的邏輯處理

在不符合Python解釋器的語法或邏輯規(guī)則時(shí),是由Python解釋器主動(dòng)觸發(fā)的各種類型的異常,而對于違反程序員自定制的各類規(guī)則,則需要由程序員自己來明確地觸發(fā)異常,這就用到了raise語句,raise后必須是一個(gè)異常的類或者是異常的實(shí)例

class Student:
  def __init__(self,name,age):
    if not isinstance(name,str):
      raise TypeError('name must be str')
    if not isinstance(age,int):
      raise TypeError('age must be int')

    self.name=name
    self.age=age

stu1=Student(4573,18) # TypeError: name must be str
stu2=Student('egon','18') # TypeError: age must be int

在內(nèi)置異常不夠用的情況下,我們可以通過繼承內(nèi)置的異常類來自定義異常類

class PoolEmptyError(Exception): # 可以通過繼承Exception來定義一個(gè)全新的異常
  def __init__(self,value='The proxy source is exhausted'): # 可以定制初始化方法
    super(PoolEmptyError,self).__init__()
    self.value=value

  def __str__(self): # 可以定義該方法用來定制觸發(fā)異常時(shí)打印異常值的格式
    return '< %s >' %self.value


class NetworkIOError(IOError): # 也可以在特定異常的基礎(chǔ)上擴(kuò)展一個(gè)相關(guān)的異常
  pass


raise PoolEmptyError # __main__.PoolEmptyError: < The proxy source is exhausted >
raise NetworkIOError('連接被拒絕') # __main__.NetworkIOError: 連接被拒絕

最后,Python還提供了一個(gè)斷言語句assert expression,斷定表達(dá)式expression成立,否則觸發(fā)異常AssertionError,與raise-if-not的語義相同,如下

age='18'

# 若表達(dá)式isinstance(age,int)返回值為False則觸發(fā)異常AssertionError
assert isinstance(age,int)

# 等同于
if not isinstance(age,int):
  raise AssertionError

在了解了異常處理機(jī)制后,本著提高程序容錯(cuò)性和可靠性的目的,讀者可能會(huì)錯(cuò)誤地認(rèn)為應(yīng)該盡可能多地為程序加上try...except...,這其是在過度消費(fèi)程序的可讀性,因?yàn)閠ry...except本來就是你附加給程序的一種額外的邏輯,與你的主要工作是沒有多大關(guān)系的。所以不要隨便使用異常捕獲,只用當(dāng)當(dāng)異常發(fā)生時(shí)不可預(yù)知時(shí),或萬不得已時(shí)才使用異常捕獲。

以上就是詳解python中的異常捕獲的詳細(xì)內(nèi)容,更多關(guān)于python 異常捕獲的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • Python?hashlib模塊詳細(xì)講解使用方法

    Python?hashlib模塊詳細(xì)講解使用方法

    hashlib?是一個(gè)提供了一些流行的hash算法的?Python?標(biāo)準(zhǔn)庫.其中所包括的算法有?md5,?sha1,?sha224,?sha256,?sha384,?sha512.?另外,模塊中所定義的?new(name,?string=”)?方法可通過指定系統(tǒng)所支持的hash算法來構(gòu)造相應(yīng)的hash對象
    2022-11-11
  • Python實(shí)現(xiàn)Restful API的例子

    Python實(shí)現(xiàn)Restful API的例子

    今天小編就為大家分享一篇Python實(shí)現(xiàn)Restful API的例子,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-08-08
  • 關(guān)于Flask 上下文詳細(xì)介紹

    關(guān)于Flask 上下文詳細(xì)介紹

    這篇文章主要給大家分享了關(guān)于Flask 上下文詳細(xì)介紹,我們可以把上下文理解為當(dāng)前環(huán)境的快照,是一個(gè)用來保存狀態(tài)的對象。在代碼執(zhí)行的某個(gè)時(shí)刻,根據(jù)上下文的代碼邏輯,可以決定在當(dāng)前時(shí)刻下使用到的環(huán)境變量等。下面一起進(jìn)入文章了解詳情內(nèi)容,需要的朋友也可以參考一下
    2021-11-11
  • 由淺入深學(xué)習(xí)TensorFlow MNIST 數(shù)據(jù)集

    由淺入深學(xué)習(xí)TensorFlow MNIST 數(shù)據(jù)集

    這篇文章主要由淺入深學(xué)習(xí)的講解TensorFlow MNIST 數(shù)據(jù)集,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2021-09-09
  • 使用Pycharm為項(xiàng)目創(chuàng)建一個(gè)虛擬環(huán)境完整圖文教程

    使用Pycharm為項(xiàng)目創(chuàng)建一個(gè)虛擬環(huán)境完整圖文教程

    這篇文章主要給大家介紹了關(guān)于使用Pycharm為項(xiàng)目創(chuàng)建一個(gè)虛擬環(huán)境的相關(guān)資料,我們在使用pycharm做項(xiàng)目時(shí),最好給每一個(gè)工程都創(chuàng)建一個(gè)虛擬環(huán)境,將對應(yīng)的安裝包放在該虛擬環(huán)境中,避免項(xiàng)目與項(xiàng)目之間產(chǎn)生關(guān)系或沖突,便于管理,需要的朋友可以參考下
    2023-09-09
  • Python 調(diào)用有道翻譯接口實(shí)現(xiàn)翻譯

    Python 調(diào)用有道翻譯接口實(shí)現(xiàn)翻譯

    這篇文章主要介紹了Python 調(diào)用有道翻譯接口實(shí)現(xiàn)翻譯,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-03-03
  • Python編程functools模塊創(chuàng)建修改的高階函數(shù)解析

    Python編程functools模塊創(chuàng)建修改的高階函數(shù)解析

    本篇文章主要為大家介紹functools模塊中用于創(chuàng)建、修改函數(shù)的高階函數(shù),有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2021-09-09
  • Pandas繪圖函數(shù)超詳細(xì)講解

    Pandas繪圖函數(shù)超詳細(xì)講解

    matplotlib要組裝一張圖表,需要的各個(gè)基礎(chǔ)組件對象。相對工作量較大,但在pandas中我們有行標(biāo)簽和列標(biāo)簽以及分組信息。原本制作一張圖表需要一大堆matplotlib代碼。在pandas中只需要一兩條代碼就可以了,今天記錄一下,pandas中常見的幾個(gè)繪制圖表的方法
    2022-12-12
  • Python自定義簡單圖軸簡單實(shí)例

    Python自定義簡單圖軸簡單實(shí)例

    這篇文章主要介紹了Python自定義簡單圖軸簡單實(shí)例,具有一定借鑒價(jià)值,需要的朋友可以參考下
    2018-01-01
  • python des,aes,rsa加解密的實(shí)現(xiàn)

    python des,aes,rsa加解密的實(shí)現(xiàn)

    這篇文章主要介紹了python des,aes,rsa加解密的實(shí)現(xiàn),幫助大家更好的理解和使用python,感興趣的朋友可以了解下
    2021-01-01

最新評論

长葛市| 四会市| 灌南县| 南华县| 松江区| 嫩江县| 调兵山市| 五寨县| 瑞昌市| 公安县| 普安县| 临沧市| 喀喇| 二连浩特市| 界首市| 瓮安县| 牟定县| 蓝山县| 松阳县| 陵川县| 永仁县| 淮北市| 隆尧县| 彝良县| 龙口市| 青州市| 平阳县| 武穴市| 鲜城| 乌兰县| 衡山县| 保定市| 个旧市| 尉氏县| 察隅县| 兰溪市| 林芝县| 双城市| 忻城县| 隆化县| 石首市|