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

Python的異常問題(Python Exception)

 更新時(shí)間:2023年08月11日 09:05:59   作者:子黃求知若渴  
這篇文章主要介紹了Python的異常問題(Python Exception),具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教

異常 Exception

錯(cuò)誤

  • 在編寫代碼時(shí)能夠避免的
  • 語(yǔ)法錯(cuò)誤:未按照代碼限制進(jìn)行編寫,或者手誤拼錯(cuò)了變量名等
  • 邏輯錯(cuò)誤:思維方向出現(xiàn)了問題,算法不正確等。

異常

  • 編寫代碼階段無(wú)法避免的,與運(yùn)行時(shí)環(huán)境相關(guān)的錯(cuò)誤。例如打開的文件不存在,網(wǎng)絡(luò)中斷等。
  • 異常是可追溯的,Python中使用Tranceback來(lái)追溯異常。

Python中的Exception

  • Python中提供了一系列異常類和try語(yǔ)句塊來(lái)捕獲和處理異常。
  • 如果程序中觸發(fā)了異常,當(dāng)前函數(shù)未捕獲則會(huì)向外拋出拋給調(diào)用者,直到被捕獲或者拋到Python解釋器,解釋器停止當(dāng)前線程,如若是主線程,也結(jié)束當(dāng)前進(jìn)程。
  • 當(dāng)程序出現(xiàn)異常時(shí),將會(huì)導(dǎo)致后續(xù)的進(jìn)行不可控,所以異常未處理終止線程的操作是很有必要的。
  • 異常出現(xiàn)導(dǎo)致的后果十分嚴(yán)重,需要在拋到解釋器前進(jìn)行處理。

raise

  • 使用raise Exception來(lái)顯式拋出異常。
  • raise會(huì)拋出一個(gè)所跟的異常類實(shí)例,如果跟的是一個(gè)類,則無(wú)參地初始化后拋出。
  • 在except中或者finally中可以使用不跟對(duì)象的raise,會(huì)拋出最近觸發(fā)的一個(gè)異常。
raise Exception  # 使用無(wú)參初始化
raise Exception('Exception', 200)  #帶參初始化
try:
    raise Exception()
except:
    raise # 拋出上面的異常實(shí)例

try語(yǔ)句塊

語(yǔ)句作用
try在try后except前的語(yǔ)句將會(huì)由except來(lái)捕獲
except語(yǔ)句后跟一個(gè)異常類(繼承自BaseException或其子類),該except會(huì)捕捉該類或其子孫類實(shí)例。如果未捕獲到且后續(xù)還有except語(yǔ)句則會(huì)由后續(xù)語(yǔ)句繼續(xù)捕獲,如果到最后一個(gè)except語(yǔ)句仍未被捕獲,則拋出到調(diào)用者。可以在類后跟 as e ,在as后跟一個(gè)變量會(huì)將捕獲到的異常類實(shí)例賦給變量。
finally在finally語(yǔ)句中的語(yǔ)句不管是否發(fā)生異常都會(huì)被執(zhí)行
else如果沒有發(fā)生異常,執(zhí)行else中的語(yǔ)句
  • try語(yǔ)句后必須有exception或finally語(yǔ)句二者其一。
  • 在exception或者finally中如果有return或者break語(yǔ)句,執(zhí)行語(yǔ)句時(shí)會(huì)忽視該異常。
try:
    1 / 0 # 將會(huì)觸發(fā)0除異常 ZeroDivisionError
except SystemExit as e: # 不是ZeroDivisionError異常的祖先類,捕獲不到
    print('SystemExit', e)
except ZeroDivisionError as e:# 捕獲ZeroDivisionError異常
    print('ZeroDivisionError', e)
else:
    print('else') # 有異常,else語(yǔ)句不執(zhí)行
finally:
    print('fianlly')
>>>ZeroDivisionError division by zero
>>>finally
try:
    x = 1 # 不產(chǎn)生異常
except SystemExit as e: 
    print('SystemExit', e)
except ZeroDivisionError as e:
    print('ZeroDivisionError', e)
else:
    print('else') # 沒有異常,else語(yǔ)句被執(zhí)行
finally:
    print('fianlly') # finally中的語(yǔ)句依舊被執(zhí)行
>>>else
>>>finally    

捕獲策略

  • 如果異常不處理,則會(huì)向上一層,即調(diào)用者拋出,直到解釋器。
  • 所以可以在發(fā)生處到解釋器途中進(jìn)行捕獲處理,所以在哪個(gè)位置進(jìn)行處理也是一個(gè)問題。

立即捕獲

在異常發(fā)生處直接捕獲進(jìn)行處理。

  • 發(fā)生后直接就處理了,不向外拋出,消耗最小,最高效。
  • 用戶不需要管是否發(fā)生了異常,只要處理了即可。
  • 可能不是調(diào)用者想要的結(jié)果,有點(diǎn)過于自作主張了。
def get_int(data):
    """
    轉(zhuǎn)換一個(gè)值為int類型
    """
    try:
        return int(data)
    except:
        return 0

發(fā)生異常后直接返回一個(gè)固定的值,而不向外拋出。

調(diào)用者無(wú)需處理該異常,有時(shí)返回的結(jié)果不符合預(yù)期。

邊界捕獲

封裝產(chǎn)生邊界

  • 在設(shè)計(jì)模塊或者其他服務(wù)的時(shí)候,發(fā)生異常應(yīng)該交由調(diào)用者來(lái)處理。如果自行處理,調(diào)用者無(wú)法察覺并處理該異常
  • 例如內(nèi)建函數(shù)open,文件不存在會(huì)拋出FileNotFoundError異常,把處理權(quán)交由用戶。用戶不處理則線程退出。

類繼承樹

BaseException
 +-- SystemExit
 +-- KeyboardInterrupt
 +-- GeneratorExit
 +-- Exception
      +-- StopIteration
      +-- StopAsyncIteration
      +-- ArithmeticError
      |    +-- FloatingPointError
      |    +-- OverflowError
      |    +-- ZeroDivisionError
      +-- AssertionError
      +-- AttributeError
      +-- BufferError
      +-- EOFError
      +-- ImportError
      |    +-- ModuleNotFoundError
      +-- LookupError
      |    +-- IndexError
      |    +-- KeyError
      +-- MemoryError
      +-- NameError
      |    +-- UnboundLocalError
      +-- OSError
      |    +-- BlockingIOError
      |    +-- ChildProcessError
      |    +-- ConnectionError
      |    |    +-- BrokenPipeError
      |    |    +-- ConnectionAbortedError
      |    |    +-- ConnectionRefusedError
      |    |    +-- ConnectionResetError
      |    +-- FileExistsError
      |    +-- FileNotFoundError
      |    +-- InterruptedError
      |    +-- IsADirectoryError
      |    +-- NotADirectoryError
      |    +-- PermissionError
      |    +-- ProcessLookupError
      |    +-- TimeoutError
      +-- ReferenceError
      +-- RuntimeError
      |    +-- NotImplementedError
      |    +-- RecursionError
      +-- SyntaxError
      |    +-- IndentationError
      |         +-- TabError
      +-- SystemError
      +-- TypeError
      +-- ValueError
      |    +-- UnicodeError
      |         +-- UnicodeDecodeError
      |         +-- UnicodeEncodeError
      |         +-- UnicodeTranslateError
      +-- Warning
           +-- DeprecationWarning
           +-- PendingDeprecationWarning
           +-- RuntimeWarning
           +-- SyntaxWarning
           +-- UserWarning
           +-- FutureWarning
           +-- ImportWarning
           +-- UnicodeWarning
           +-- BytesWarning
           +-- ResourceWarning

總結(jié)

以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • pandas is in和not in的使用說(shuō)明

    pandas is in和not in的使用說(shuō)明

    這篇文章主要介紹了pandas is in和not in的使用說(shuō)明,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來(lái)看看吧
    2021-03-03
  • Python正則表達(dá)式從原理到實(shí)踐操作詳解

    Python正則表達(dá)式從原理到實(shí)踐操作詳解

    正則表達(dá)式是對(duì)字符串提取的一套規(guī)則,我們把這個(gè)規(guī)則用正則里面的特定語(yǔ)法表達(dá)出來(lái),去匹配滿足這個(gè)規(guī)則的字符串,這篇文章主要介紹了Python正則表達(dá)式從原理到實(shí)踐操作的相關(guān)資料,需要的朋友可以參考下
    2026-04-04
  • Python模塊pexpect安裝及使用流程

    Python模塊pexpect安裝及使用流程

    Pexpect使Python成為控制其他應(yīng)用程序的更好工具,這篇文章主要介紹了Python模塊之pexpect的安裝及使用流程,需要的朋友可以參考下
    2022-02-02
  • 如何在Python中安裝GDAL庫(kù)

    如何在Python中安裝GDAL庫(kù)

    這篇文章主要介紹了如何在Python中安裝GDAL庫(kù),GDAL是一個(gè)在X/MIT許可協(xié)議下的開源柵格空間數(shù)據(jù)轉(zhuǎn)換庫(kù),需要的朋友可以參考下
    2023-04-04
  • Python高級(jí)數(shù)據(jù)分析之pandas和matplotlib繪圖

    Python高級(jí)數(shù)據(jù)分析之pandas和matplotlib繪圖

    Matplotlib是一個(gè)強(qiáng)大的Python繪圖和數(shù)據(jù)可視化的工具包,下面這篇文章主要給大家介紹了關(guān)于Python高級(jí)數(shù)據(jù)分析之pandas和matplotlib繪圖的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2022-05-05
  • Python中多繼承與菱形繼承問題的解決方案與實(shí)踐

    Python中多繼承與菱形繼承問題的解決方案與實(shí)踐

    在Python這個(gè)靈活且功能強(qiáng)大的編程語(yǔ)言中,多繼承是一個(gè)既強(qiáng)大又復(fù)雜的概念,它允許一個(gè)類繼承自多個(gè)父類,從而能夠復(fù)用多個(gè)父類的屬性和方法,本文將深入解釋Python中的多繼承概念,詳細(xì)剖析菱形繼承問題,并探討Python是如何解決這一難題的,需要的朋友可以參考下
    2024-07-07
  • python修改pip install默認(rèn)安裝路徑的詳細(xì)步驟

    python修改pip install默認(rèn)安裝路徑的詳細(xì)步驟

    pip安裝的第三方庫(kù)默認(rèn)存放在C盤中,為了便于管理和不過度占用C盤空間所以想修改默認(rèn)的pip路徑,文章通過圖文結(jié)合的方式給大家介紹的非常詳細(xì),需要的朋友可以參考下
    2025-04-04
  • python使用Plotly繪圖工具繪制氣泡圖

    python使用Plotly繪圖工具繪制氣泡圖

    這篇文章主要為大家詳細(xì)介紹了python使用Plotly繪圖工具繪制氣泡圖,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2019-04-04
  • Python中Request的安裝以及簡(jiǎn)單的使用方法圖文教程

    Python中Request的安裝以及簡(jiǎn)單的使用方法圖文教程

    python里的request庫(kù)經(jīng)常被用于進(jìn)行網(wǎng)絡(luò)爬蟲,想要學(xué)習(xí)網(wǎng)絡(luò)爬蟲的同學(xué)必須得安裝request這個(gè)第三方庫(kù),這篇文章主要介紹了Python中Request的安裝以及簡(jiǎn)單使用方法的相關(guān)資料,需要的朋友可以參考下
    2025-12-12
  • python中文件導(dǎo)入的使用(在同一目錄下和在不同目錄下)

    python中文件導(dǎo)入的使用(在同一目錄下和在不同目錄下)

    在Python中,使用pathlib模塊的Path類可以方便地導(dǎo)入不同目錄下的文件,本文就來(lái)介紹一下,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2024-12-12

最新評(píng)論

徐汇区| 江孜县| 天柱县| 涞源县| 乌鲁木齐县| 隆回县| 溧水县| 遂平县| 娱乐| 明溪县| 阳城县| 东海县| 淮阳县| 合山市| 区。| 即墨市| 曲阜市| 内黄县| 金溪县| 涟源市| 黄冈市| 福清市| 大庆市| 凉城县| 简阳市| 普兰县| 上杭县| 镶黄旗| 从化市| 龙游县| 绵竹市| 新绛县| 东平县| 布尔津县| 岗巴县| 蒙城县| 余庆县| 嫩江县| 綦江县| 张家港市| 靖远县|