開發與維運

異常傳播 | Python從入門到精通:高階篇之四十一

異常簡介 | Python從入門到精通:高階篇之四十

異常傳播

def fn():
    print('Hello fn')

fn()

執行結果:

image.png

此時可以正常執行輸出。
在全局中添加代碼,造成異常:

print(10/0)

執行結果:

image.png

我們在函數中添加異常代碼:

def fn():
    print('Hello fn')
    print(10/0)

fn()

執行結果:

image.png

當在函數中出現異常時,如果在函數中對異常進行了處理,則異常不會再繼續傳播;如果函數中沒有對異常進行處理,則異常會繼續向函數調用處傳播;如果函數調用處處理了異常,則不再傳播,如果沒有處理則繼續向調用處傳播;直到傳遞到全局作用域(主模塊)如果依然沒有處理,則程序終止,並且顯示異常信息。

我們修改上述代碼:

def fn():
    print('Hello fn')
    print(10/0)

try:
    fn()
except:
    pass

執行結果:

image.png

此時異常就被處理掉了,程序可以正常執行。
我們再來看一個:

def fn():
    print('Hello fn')
    print(10/0)

def fn2():
    print('Hello fn2')
    fn()

fn2()

def fn3():
    print('Hello fn3')
    fn2()

fn3()    

執行結果:

image.png

我們可以看出異常未經過處理,傳播的過程。即拋出異常。

當程序運行過程中出現異常以後,所有的異常信息會被保存一個專門的異常對象中,而異常傳播時,實際上就是異常對象拋給了調用處。

比如 : ZeroDivisionError類的對象專門用來表示除0的異常;
NameError類的對象專門用來處理變量錯誤的異常;
....

在Python為我們提供了多個異常對象 。
我們通過官方文檔去查找。

image.png
image.png

裡面提供了很多的異常信息。
我們是通過對象拋出異常的,那麼如何知道異常的信息呢?我們下一節來看。

配套視頻課程,點擊這裡查看

獲取更多資源請訂閱Python學習站

Leave a Reply

Your email address will not be published. Required fields are marked *