国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專(zhuān)欄INFORMATION COLUMN

python基礎(chǔ)教程:錯(cuò)誤處理和異常處理(二)

wujl596 / 3521人閱讀

摘要:語(yǔ)句就是幫助我們拋出知道異常的,比如的使用很簡(jiǎn)單,它的語(yǔ)法如下如果它后面不帶表達(dá)式參數(shù),它會(huì)重新引發(fā)當(dāng)前作用域內(nèi)最后一個(gè)激活的異常。,用于異常的串聯(lián)。自定義的異常類(lèi)的名稱通常以錯(cuò)誤結(jié)尾,類(lèi)似與內(nèi)置標(biāo)準(zhǔn)異常的命名。

前面我們講到的Python編程過(guò)程中,在可能出現(xiàn)異常的地方使用嘗試語(yǔ)句,來(lái)正確的處理一些異常,可以保證程序不中斷繼續(xù)運(yùn)行。

拋出異常

有時(shí)候,我們可能需要在程序的某些地方主動(dòng)拋出異常,通知調(diào)用該代碼的程序有錯(cuò)誤發(fā)生這時(shí)候,我們就要用到。raise語(yǔ)句。raise語(yǔ)句就是幫助我們拋出知道異常的,比如:

In [6]: raise NameError("Bad Name")
-----------------------------------
NameError           Traceback (most recent call last)
 in 
----> 1 raise NameError("Bad Name")

NameError: Bad Name

raise的使用很簡(jiǎn)單,它的語(yǔ)法如下:

raise [expression [from expression]]

如果它后面不帶表達(dá)式(參數(shù)),它會(huì)重新引發(fā)當(dāng)前作用域內(nèi)最后一個(gè)激活的異常。如果當(dāng)前作用域內(nèi)沒(méi)有激活的異常,將會(huì)引發(fā)RuntimeError來(lái)提示錯(cuò)誤。

如果后面帶有表達(dá)式,則將表達(dá)式求值為要拋出的異常對(duì)象,該表達(dá)式必須是一個(gè)異常實(shí)例或者是一個(gè)異常類(lèi)(自繼承BaseException類(lèi))。如果它是一個(gè)異常類(lèi),它將通過(guò)調(diào)用沒(méi)有參數(shù)的構(gòu)造函數(shù)來(lái)隱式實(shí)例化:

raise NameError  # 等同于 "raise NameError()"

raise后面表達(dá)式還可以跟一個(gè)from?...。,用于異常的串聯(lián)。from子句的表達(dá)式必須是另一個(gè)異常或?qū)嵗鼘⒆鳛榭蓪?xiě)的(可寫(xiě)入的)的__cause__屬性被關(guān)聯(lián)到所引發(fā)的異常。如果引發(fā)的異常未被捕捉處理,兩個(gè)異常都將被打印出來(lái):

In [9]: try: 
   ...:     print(10/0) 
   ...: except Exception as e: 
   ...:     raise RuntimeError("something is wrong") from e 
   ...:
----------------------------------------------------------
ZeroDivisionError            Traceback (most recent call last)
 in 
      1 try:
----> 2     print(10/0)
      3 except Exception as e:

ZeroDivisionError: division by zero

The above exception was the direct cause of the following exception:

RuntimeError                 Traceback (most recent call last)
 in 
      2     print(10/0)
      3 except Exception as e:
----> 4     raise RuntimeError("something is wrong") from e
      5 

RuntimeError: something is wrong

如果異常一個(gè)在except[主語(yǔ)]或finally[主語(yǔ)]中被拋出,類(lèi)似的機(jī)制會(huì)隱式地發(fā)揮作用,的之前將異常關(guān)聯(lián)被新到異常的__context__屬性例如:

In [10]: try: 
    ...:     print(10/0) 
    ...: except: 
    ...:     raise RuntimeError("something is wrong") 
    ...:
-----------------------------------------------
ZeroDivisionError           Traceback (most recent call last)
 in 
      1 try:
----> 2     print(10/0)
      3 except:

ZeroDivisionError: division by zero

During handling of the above exception, another exception occurred:

RuntimeError                Traceback (most recent call last)
 in 
      2     print(10/0)
      3 except:
----> 4     raise RuntimeError("something is wrong")
      5 

RuntimeError: something is wrong

串連異常柯林斯通過(guò)在from[主語(yǔ)]中用None來(lái)顯示地禁止:

In [11]: try: 
    ...:     print(10/0) 
    ...: except: 
    ...:     raise RuntimeError("something is wrong") from None 
    ...:
-------------------------------
RuntimeError                   Traceback (most recent call last)
 in 
      2     print(10/0)
      3 except:
----> 4     raise RuntimeError("something is wrong") from None
      5 

RuntimeError: something is wrong
用戶自定義異常

Python的允許用戶自定義異常類(lèi),應(yīng)該通常直接或間接地繼承自Exception類(lèi)。

自定義的異常類(lèi)的名稱通常以“錯(cuò)誤”結(jié)尾,類(lèi)似與內(nèi)置標(biāo)準(zhǔn)異常的命名。自定義的異常類(lèi),可以像其它類(lèi)那樣可以執(zhí)行任何操作,但通常保持簡(jiǎn)單,只提供用以處理程序?yàn)楫惓L崛∮嘘P(guān)錯(cuò)誤信息的屬性為模塊自定義多個(gè)不同錯(cuò)誤的異常時(shí),通常是為該模塊定義一個(gè)異常基類(lèi),再為不同錯(cuò)誤創(chuàng)建特定的子類(lèi)例如。:

class ModuleError(Exception):
    """模塊的異常基類(lèi)"""
    pass

class ModuleNameError(ModuleError):
    """模塊的特定異常子類(lèi)"""
    pass

class ModuleValueError(ModuleError):
    """模塊的另一個(gè)特定異常子類(lèi)"""
    pass
最后的清理操作:finally子句

finally的英文[主語(yǔ)]?try語(yǔ)句的一個(gè)可選[主語(yǔ)],用于定義在任何情況下都執(zhí)行的操作,叫做“清理操作”例如:

In [12]: try: 
    ...:     raise NameError 
    ...: finally: 
    ...:     print("Bye :)") 
    ...:      
    ...:
Bye :)
-------------------------------
NameError        Traceback (most recent call last)
 in 
      1 try:
----> 2     raise NameError
      3 finally:
      4     print("Bye :)")
      5 

NameError: 

finally子句總會(huì)在離開(kāi)try語(yǔ)句前被執(zhí)行,無(wú)論發(fā)生異常與否。當(dāng)在try子句中發(fā)生了異常且尚未被except子句處理(或者它發(fā)生在除或其他子句中)時(shí),該異常將在終子句執(zhí)行后被重新拋出。當(dāng)try語(yǔ)句的任何其他子句通過(guò)break,continue或return語(yǔ)句離開(kāi)時(shí),最后也會(huì)在“離開(kāi)之前”被執(zhí)行,參考下面這個(gè)更復(fù)雜的例子:

In [13]: def divide(a, b): 
    ...:     try: 
    ...:         result = a / b 
    ...:     except ZeroDivisionError: 
    ...:         print("divided by zero!") 
    ...:     else: 
    ...:         print("result is", result) 
    ...:     finally: 
    ...:         print("leaving try") 
    ...:

In [14]: divide(8, 2)
result is 4.0
leaving try

In [15]: divide(8, 0)
divided by zero!
leaving try

In [16]: divide("a", 2)
leaving try
-----------------------
TypeError              Traceback (most recent call last)
 in 
----> 1 divide("a", 2)

 in divide(a, b)
      1 def divide(a, b):
      2     try:
----> 3         result = a / b
      4     except ZeroDivisionError:
      5         print("divided by zero!")

TypeError: unsupported operand type(s) for /: "str" and "int"

從上面的例子我們看到,finally子句總是會(huì)被執(zhí)行。字符串但被除時(shí)引發(fā)了TypeError的異常,異常這個(gè)沒(méi)有被except?...。處理,在就會(huì)finally?...。執(zhí)行后被重新拋出。

在編程實(shí)踐中,finally子句對(duì)釋放文件或網(wǎng)絡(luò)連接等外部資源是非常有用的。

總結(jié)

編程中,我們不僅要在恰當(dāng)?shù)牡胤教幚懋惓#惨诒匾臅r(shí)候拋出異常,我們拋出異常時(shí)可以自定義異常。熟練運(yùn)用異常可以使我們的程序更加健壯,別忘了必要的時(shí)候使用finally來(lái)釋放外部資源。

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://m.specialneedsforspecialkids.com/yun/43846.html

相關(guān)文章

  • python基礎(chǔ)教程錯(cuò)誤處理異常處理

    摘要:在前面介紹語(yǔ)法的過(guò)程中,我們已經(jīng)接觸到了解釋器給的錯(cuò)誤和異常,但并沒(méi)有詳細(xì)講解它們。解釋器這樣報(bào)出的好處是告訴我們哪一行代碼出錯(cuò)了錯(cuò)誤的類(lèi)型是什么。 在前面介紹Python語(yǔ)法的過(guò)程中,我們已經(jīng)接觸到了解釋器給的錯(cuò)誤和異常,但并沒(méi)有詳細(xì)講解它們。現(xiàn)在我們就全面的來(lái)學(xué)習(xí)Python是對(duì)語(yǔ)法錯(cuò)誤等錯(cuò)誤進(jìn)行定義和處理的,這包括至少有兩種可以區(qū)分的錯(cuò)誤,它們是語(yǔ)法錯(cuò)誤和異常。 語(yǔ)法錯(cuò)誤 Pyt...

    tinylcy 評(píng)論0 收藏0
  • 基礎(chǔ)如何學(xué)爬蟲(chóng)技術(shù)

    摘要:楚江數(shù)據(jù)是專(zhuān)業(yè)的互聯(lián)網(wǎng)數(shù)據(jù)技術(shù)服務(wù),現(xiàn)整理出零基礎(chǔ)如何學(xué)爬蟲(chóng)技術(shù)以供學(xué)習(xí),。本文來(lái)源知乎作者路人甲鏈接楚江數(shù)據(jù)提供網(wǎng)站數(shù)據(jù)采集和爬蟲(chóng)軟件定制開(kāi)發(fā)服務(wù),服務(wù)范圍涵蓋社交網(wǎng)絡(luò)電子商務(wù)分類(lèi)信息學(xué)術(shù)研究等。 楚江數(shù)據(jù)是專(zhuān)業(yè)的互聯(lián)網(wǎng)數(shù)據(jù)技術(shù)服務(wù),現(xiàn)整理出零基礎(chǔ)如何學(xué)爬蟲(chóng)技術(shù)以供學(xué)習(xí),http://www.chujiangdata.com。 第一:Python爬蟲(chóng)學(xué)習(xí)系列教程(來(lái)源于某博主:htt...

    KunMinX 評(píng)論0 收藏0
  • python基礎(chǔ)教程:內(nèi)置函數(shù)(

    摘要:繼續(xù)講述更多的的內(nèi)置函數(shù)。傳遞以切換緩沖關(guān)閉僅允許在二進(jìn)制模式下,選擇行緩沖僅在文本模式下可用,并且的整數(shù)以指示固定大小的塊緩沖區(qū)的大小以字節(jié)為單位。啟動(dòng)內(nèi)置的幫助系統(tǒng)此函數(shù)主要在交互式中使用。 繼續(xù)講述更多的Python的內(nèi)置函數(shù)。 showImg(https://segmentfault.com/img/remote/1460000019193976); IO操作 input([p...

    xiaodao 評(píng)論0 收藏0
  • ??Python異常捕獲處理??保姆式教學(xué),代碼異常報(bào)錯(cuò)也能那么諧且個(gè)性!

    ?前言 代碼出現(xiàn)異常而報(bào)錯(cuò)再正常不過(guò)了,但為什么要處理異常? 由于異常的存在,代碼運(yùn)行時(shí)會(huì)出現(xiàn)一大堆的紅色字體提示,對(duì)于程序員還好,見(jiàn)紅色報(bào)錯(cuò)見(jiàn)多了習(xí)慣了,但如果你開(kāi)發(fā)出來(lái)的東西要給別人看,那么不懂代碼的人就會(huì)一臉懵逼,對(duì)產(chǎn)品的印象都不太好了。 比如我們經(jīng)常簡(jiǎn)單網(wǎng)頁(yè)丟失的情況,其實(shí)是就是網(wǎng)頁(yè)代碼執(zhí)行時(shí)發(fā)生了異常,但有的網(wǎng)頁(yè)還是很個(gè)性的,提示的信息可能是比較人性化的,比如CSDN你收藏的文章被后臺(tái)刪...

    awesome23 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

wujl596

|高級(jí)講師

TA的文章

閱讀更多
最新活動(dòng)
閱讀需要支付1元查看
<