亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

Python的異常問題(Python Exception)

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

異常 Exception

錯誤

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

異常

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

Python中的Exception

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

raise

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

try語句塊

語句作用
try在try后except前的語句將會由except來捕獲
except語句后跟一個異常類(繼承自BaseException或其子類),該except會捕捉該類或其子孫類實例。如果未捕獲到且后續(xù)還有except語句則會由后續(xù)語句繼續(xù)捕獲,如果到最后一個except語句仍未被捕獲,則拋出到調(diào)用者??梢栽陬惡蟾?as e ,在as后跟一個變量會將捕獲到的異常類實例賦給變量。
finally在finally語句中的語句不管是否發(fā)生異常都會被執(zhí)行
else如果沒有發(fā)生異常,執(zhí)行else中的語句
  • try語句后必須有exception或finally語句二者其一。
  • 在exception或者finally中如果有return或者break語句,執(zhí)行語句時會忽視該異常。
try:
    1 / 0 # 將會觸發(fā)0除異常 ZeroDivisionError
except SystemExit as e: # 不是ZeroDivisionError異常的祖先類,捕獲不到
    print('SystemExit', e)
except ZeroDivisionError as e:# 捕獲ZeroDivisionError異常
    print('ZeroDivisionError', e)
else:
    print('else') # 有異常,else語句不執(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語句被執(zhí)行
finally:
    print('fianlly') # finally中的語句依舊被執(zhí)行
>>>else
>>>finally    

捕獲策略

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

立即捕獲

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

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

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

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

邊界捕獲

封裝產(chǎn)生邊界

  • 在設計模塊或者其他服務的時候,發(fā)生異常應該交由調(diào)用者來處理。如果自行處理,調(diào)用者無法察覺并處理該異常
  • 例如內(nèi)建函數(shù)open,文件不存在會拋出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é)

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

相關(guān)文章

最新評論